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

      

  • 相关阅读:
    php 获取机器名
    php缓存参数祥解
    ajax参数祥解
    php 正则匹配返回字符串
    TP5验证规则使用
    J
    j
    virtualBox 桥接网卡 未指定
    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
    Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  • 原文地址:https://www.cnblogs.com/spring87/p/4497469.html
Copyright © 2011-2022 走看看