Android Listview切换动画,扩展到任意view切换之间动画实现
添加布局如下:
<?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(); } }
时刻怀有一颗虔诚之心,乐于分享。知识才更有意义。