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

      

  • 相关阅读:
    学了axure的感受
    axure的功能
    PS的应用
    day15-1 模块
    day14-2 模块详解
    day14-1 模块定义,导入
    day13-1 Json & pickle 数据序列化
    day12-3 内置方法
    day12-2 内置方法
    day12-1 迭代器和生成器
  • 原文地址:https://www.cnblogs.com/spring87/p/4497469.html
Copyright © 2011-2022 走看看