zoukankan      html  css  js  c++  java
  • 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();
    	}
    
    }
    

      

  • 相关阅读:
    Linux下编译安装redis
    docker搭建swoole的简易的聊天室
    Linux下面安装swoole
    laravel命令
    史上最污技术解读,60 个 IT 术语我竟然秒懂了.....
    redis集群搭建
    Windows安装MongoDB
    十大经典排序算法(动图演示)
    消息中间件基础
    laravel邮件发送
  • 原文地址:https://www.cnblogs.com/spring87/p/4497469.html
Copyright © 2011-2022 走看看