• 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();
    	}
    
    }
    

      

  • 相关阅读:
    Log4j2_java日志使用
    Log4j_java日志使用
    DB_常用知识
    Oracle_内置信息
    Loadrunner使用时IE浏览器打不开怎么办
    性能测试
    python条件语句及循环语句
    计算机网络
    单元测试
    边界条件测试
  • 原文地址:https://www.cnblogs.com/spring87/p/4497469.html
Copyright © 2020-2023  润新知