Android Listview切换动画,扩展到任意view切换之间动画实现

简介: 添加布局如下:        切换动画实现:   package com.edaixi.tempbak; import android.

添加布局如下:

 

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/button"
        android:text="切换按钮"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ListView
        android:id="@+id/list_en"
        android:layout_width="match_parent"
        android:layout_weight="1.0"
        android:layout_height="0dip"/>
    <ListView
        android:id="@+id/list_fr"
        android:layout_width="match_parent"
        android:layout_weight="1.0"
        android:layout_height="0dip"
        android:visibility="gone"/>
</LinearLayout>

  

 

切换动画实现:

 

package com.edaixi.tempbak;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.Toast;

@SuppressLint("NewApi")
public class SwitchListviewAnimation extends Activity {

	private static final int DURATION = 1500;
	private SeekBar mSeekBar;

	private static final String[] LIST_STRINGS_EN = new String[] { "e 袋洗 - 1",
			"e 袋洗 - 2", "e 袋洗 - 3", "e 袋洗 - 4", "e 袋洗 - 5", "e 袋洗 - 6" };
	private static final String[] LIST_STRINGS_FR = new String[] { "阿姨帮 - 1",
			"阿姨帮 - 2", "阿姨帮 - 3", "阿姨帮 - 4", "阿姨帮 - 5", "阿姨帮 - 6" };

	ListView mEnglishList;
	ListView mFrenchList;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_switch);
		mEnglishList = (ListView) findViewById(R.id.list_en);
		mFrenchList = (ListView) findViewById(R.id.list_fr);

		// Prepare the ListView
		final ArrayAdapter<String> adapterEn = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, LIST_STRINGS_EN);
		// Prepare the ListView
		final ArrayAdapter<String> adapterFr = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, LIST_STRINGS_FR);

		mEnglishList.setAdapter(adapterEn);
		mEnglishList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(getApplicationContext(),
						"---点击---" + LIST_STRINGS_EN[position], 0).show();
			}
		});
		mFrenchList.setAdapter(adapterFr);
		mFrenchList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(getApplicationContext(),
						"---点击---" + LIST_STRINGS_FR[position], 0).show();
			}
		});
		mFrenchList.setRotationY(-90f);

		Button starter = (Button) findViewById(R.id.button);
		starter.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				flipit();
			}
		});
	}

	private Interpolator accelerator = new AccelerateInterpolator();
	private Interpolator decelerator = new DecelerateInterpolator();

	private void flipit() {
		final ListView visibleList;
		final ListView invisibleList;
		if (mEnglishList.getVisibility() == View.GONE) {
			visibleList = mFrenchList;
			invisibleList = mEnglishList;
		} else {
			invisibleList = mFrenchList;
			visibleList = mEnglishList;
		}
		ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visibleList,
				"rotationY", 0f, 90f);
		visToInvis.setDuration(500);
		visToInvis.setInterpolator(accelerator);
		final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibleList,
				"rotationY", -90f, 0f);
		invisToVis.setDuration(500);
		invisToVis.setInterpolator(decelerator);
		visToInvis.addListener(new AnimatorListenerAdapter() {
			@Override
			public void onAnimationEnd(Animator anim) {
				visibleList.setVisibility(View.GONE);
				invisToVis.start();
				invisibleList.setVisibility(View.VISIBLE);
			}
		});
		visToInvis.start();
	}

}

  

目录
相关文章
|
5月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
99 2
基于Android P,自定义Android开机动画的方法
|
3月前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
6月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
158 12
|
6月前
|
XML Android开发 UED
Android动画之共享元素动画简单实践
本文介绍Android共享元素动画, 实现两Activity间平滑过渡特定UI元素。通过设置`transitionName`属性和使用`ActivityOptions.makeSceneTransitionAnimation`启动目标Activity实现动画效果。可自定义过渡动画提升体验。
89 0
|
7月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
78 2
|
6月前
|
Android开发
android 动画 插值器和估值器
android 动画 插值器和估值器
|
29天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
53 19