zoukankan      html  css  js  c++  java
  • ViewFipper 使用

    android.widget.ViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。该类有如下几个和动画相关的函数:

    l setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。

    • setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
    • showNext: 调用该函数来显示FrameLayout里面的下一个View。
    • showPrevious: 调用该函数来显示FrameLayout里面的上一个View。

    一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipper和ViewSwitcher。ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数:

    • isFlipping: 用来判断View切换是否正在进行
    • setFilpInterval:设置View之间切换的时间间隔
    • startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
    • stopFlipping: 停止View切换

    ViewSwitcher 顾名思义Switcher特指在两个View之间切换。可以通过该类指定一个ViewSwitcher.ViewFactory 工程类来创建这两个View。该类也具有两个子类ImageSwitcher、TextSwitcher分别用于图片和文本切换。

    开始写个例子:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:text="@string/hello" />
        <ViewFlipper android:id="@+id/viewflipper"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
        </ViewFlipper>
     
     
        <ViewSwitcher android:layout_height="wrap_content"
            android:layout_width="fill_parent" android:id="@+id/ButtonViewSwitcher">
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:gravity="center"
                android:padding="2dp" android:background="@android:color/darker_gray"
                android:id="@+id/ButtonLayout">
                
                <Button android:id="@+id/button1" android:layout_height="wrap_content"
                    android:layout_weight="1" android:text="上一个"
                    android:layout_width="fill_parent" />
                    
                <Button android:id="@+id/button2" android:layout_height="wrap_content"
                    android:layout_weight="1" android:text="btn2"
                    android:layout_width="fill_parent" />
                    
                <Button android:id="@+id/button3" android:layout_height="wrap_content"
                    android:layout_weight="1" android:text="下一个"
                    android:layout_width="fill_parent" />
     
            </LinearLayout>    
        </ViewSwitcher>
    </LinearLayout>

    public class ViewFipperTest extends Activity implements OnClickListener {
     
        private Button btn1, btn2, btn3;
     
        private ViewFlipper flipper;
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            _initUICtrls();
     
        }
     
        private void _initUICtrls() {
            btn1 = (Button) findViewById(R.id.button1);
            btn1.setOnClickListener(this);
     
            btn2 = (Button) findViewById(R.id.button2);
            btn2.setOnClickListener(this);
     
            btn3 = (Button) findViewById(R.id.button3);
            btn3.setOnClickListener(this);
     
            flipper = (ViewFlipper) findViewById(R.id.viewflipper);
     
            flipper.addView(addButtonByText("Start"), new LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            flipper.addView(addTextByText("gangwangchina"));
            flipper.addView(addImageById(R.drawable.icon));
            flipper.addView(addTextByText("Fushan Liaoli"));
            flipper.addView(addImageById(R.drawable.icon));
            flipper.addView(addButtonByText("End"), new LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            
    //        flipper.setInAnimation(AnimationUtils.loadAnimation(this,  
    //                android.R.anim.fade_in));  
    //        flipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
    //                android.R.anim.fade_out));
            
           
        }
     
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){  
            case R.id.button1:  
                flipper.setInAnimation(AnimationHelper.inFromLeftAnimation());
                flipper.setOutAnimation(AnimationHelper.outToRightAnimation());
                 
                flipper.showPrevious();  
                
                break;  
                  
            case R.id.button3:  
                
                
                flipper.setInAnimation(AnimationHelper.inFromRightAnimation());
                flipper.setOutAnimation(AnimationHelper.outToLeftAnimation());
                
                flipper.showNext();  
                break;  
            }  
     
        }
     
        public View addTextByText(String text) {
            TextView tv = new TextView(this);
            tv.setText(text);
            tv.setGravity(1);
            return tv;
        }
     
        public View addImageById(int id) {
            ImageView iv = new ImageView(this);
            iv.setImageResource(id);
     
            return iv;
        }
     
        public View addButtonByText(String text) {
            Button btn = new Button(this);
            btn.setText(text);
            return btn;
        }
        
        private static class AnimationHelper {
            public static Animation inFromRightAnimation() {
              Animation inFromRight = new TranslateAnimation(
              Animation.RELATIVE_TO_PARENT, +1.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f);
              inFromRight.setDuration(350);
              inFromRight.setInterpolator(new AccelerateInterpolator());
              return inFromRight;
            }
     
            public static Animation outToLeftAnimation() {
              Animation outtoLeft = new TranslateAnimation(
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, -1.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f);
              outtoLeft.setDuration(350);
              outtoLeft.setInterpolator(new AccelerateInterpolator());
              return outtoLeft;
            }
     
            public static Animation inFromLeftAnimation() {
              Animation inFromLeft = new TranslateAnimation(
              Animation.RELATIVE_TO_PARENT, -1.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f);
              inFromLeft.setDuration(350);
              inFromLeft.setInterpolator(new AccelerateInterpolator());
              return inFromLeft;
            }
     
            public static Animation outToRightAnimation() {
              Animation outtoRight = new TranslateAnimation(
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, +1.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f,
              Animation.RELATIVE_TO_PARENT, 0.0f);
              outtoRight.setDuration(350);
              outtoRight.setInterpolator(new AccelerateInterpolator());
              return outtoRight;
            }
          }
    }

    里面的AnimationHelper 类是用来处理切换效果的。

    实际效果如下:

    device

    device1

  • 相关阅读:
    用Python查找数组中出现奇数次的那个数字
    python之路--MySQL多表查询
    python之路--MySQl单表查询
    python之路--MySQL 库,表的详细操作
    python之路--MySQL数据库初识
    python之路--线程的其他方法
    python之路--关于线程的一些方法
    python之路--管道, 事件, 信号量, 进程池
    python之路--进程内容补充
    python之路--操作系统介绍,进程的创建
  • 原文地址:https://www.cnblogs.com/GnagWang/p/1966837.html
Copyright © 2011-2022 走看看