11 使用ViewFlipper实现屏幕切换动画效果

11-1 使用ViewFlipper实现的图片轮播

  Android系统自带的一个页面管理控件,它可以实现子界面的自动切换。

为ViewFlipper加入View

  (1)静态导入:在layout布局文件中直接导入

    在layout布局文件中直接导入(不灵活),在ViewFlipper控件中加入一个一个的ImageView.

 <ViewFlipper
        android:id="@+id/viewFlipper1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/icon" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/qiao" />
        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/qiao" />
        
    </ViewFlipper>

 

  (2)动态导入:addView()方法

      flipper.addView(getImageView(R.drawable.pic));

        flipper=(ViewFlipper)findViewById(R.id.flipper);
        flipper.addView(getImageView(R.drawable.pic1));
        flipper.addView(getImageView(R.drawable.pic2));
        flipper.addView(getImageView(R.drawable.pic3));

ViewFlipper常用方法:

setInAnimation(this,R.anim.left_in);//设置View进入屏幕的时候使用的动画。,R.anim.left_in自定义进入动画效果

setOutAnimation(this,R.anim.left_out);//设置View退出屏幕的时候使用的动画。

showNext:调用该函数来显示ViewFlipper里面的下一个View

showPrevious:调用该函数来显示ViewFlipper里面的上一个View

setFlipInterval(3000);//视图切换的时间间隔

startFlipping;//使用上面设置的时间间隔开始切换所有的View,切换会循环进行

stopFlipping:停止View切换

利用ViewFlipper实现的图片轮播

left_in.xml

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="2000"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
    <alpha 
        android:fromAlpha="0.5"
        android:toAlpha="1"
        android:duration="2000"
        />

</set>

 

left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:toXDelta="100%p" />

    <alpha
        android:duration="2000"
        android:fromAlpha="0.5"
        android:toAlpha="1" />

</set>

 

right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="2000"
        android:fromXDelta="100%p"
        android:toXDelta="0" />

    <alpha
        android:duration="2000"
        android:fromAlpha="0.5"
        android:toAlpha="1" />

</set>

 

right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

    <alpha
        android:duration="2000"
        android:fromAlpha="0.5"
        android:toAlpha="1" />

</set>

 

 

MainActivity.java

package com.example.andriod2_viewflipper;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class MainActivity extends Activity
{
    private ViewFlipper flipper;
    // 1. 把资源的ID写在数组里
    private int[] resId = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
            R.drawable.pic4 };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        flipper = (ViewFlipper) findViewById(R.id.flipper);

        // 动态导入的方式为ViewFlipper加入子View
        // 2.遍历数组,添加的是图片信息
        for (int i = 0; i < resId.length; i++)
        {
            flipper.addView(getImageView(resId[i]));
        }
        // 4.为ViewFlipper去添加动画效果图片切换及动画效果
        flipper.setInAnimation(this, R.anim.left_in);// 进来效果
        flipper.setOutAnimation(this, R.anim.left_out);// 出去效果
        // 设定ViewFlipper视图切换的时间间隔
        flipper.setFlipInterval(3000);// 播放的时间,毫秒值,3000毫秒即是3秒
        // 开始播放
        flipper.startFlipping();// 让动画动起来

    }

    // 3.图片信息
    private ImageView getImageView(int resId)
    {
        ImageView image = new ImageView(this);
        // image.setImageResource(resId);//图片原图
        // 图片全屏
        image.setBackgroundResource(resId);
        return image;
    }
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ViewFlipper
        android:id="@+id/flipper"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ViewFlipper>

</LinearLayout>

11-2 (知识扩展)支持手势滑动的ViewFlipper

MainActivity.java

package com.example.andriod2_viewflipper;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class MainActivity extends Activity
{
    private ViewFlipper flipper;
    // 1. 把资源的ID写在数组里
    private int[] resId = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
            R.drawable.pic4 };
    // A.2声明记录变量,因为是横向滑动故只考虑X坐标。
    private float startX;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        flipper = (ViewFlipper) findViewById(R.id.flipper);

        // 动态导入的方式为ViewFlipper加入子View
        // 2.遍历数组,添加的是图片信息
        for (int i = 0; i < resId.length; i++)
        {
            flipper.addView(getImageView(resId[i]));
        }
        /*
         * // 4.为ViewFlipper去添加动画效果图片切换及动画效果 flipper.setInAnimation(this,
         * R.anim.left_in);// 进来效果 flipper.setOutAnimation(this,
         * R.anim.left_out);// 出去效果 // 设定ViewFlipper视图切换的时间间隔
         * flipper.setFlipInterval(3000);// 播放的时间,毫秒值,3000毫秒即是3秒 // 开始播放
         * flipper.startFlipping();// 让动画动起来
         */
    }

    // a.监视手势滑动事件的处理
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        // TODO Auto-generated method stub
        switch (event.getAction())
        {

        // 手指点到屏幕上,手指落下
        case MotionEvent.ACTION_DOWN:
        {
            // A.1记录刚开始手指落下的起始坐标
            // A.3获得横向坐标的值
            startX = event.getX();
            break;
        }
        // 手指滑动
        case MotionEvent.ACTION_MOVE:
        {
            // B.1判断向左还是向右滑
            // B.2向右滑动是看前一页,100是指像素,相当于改写它的动画效果
            if (event.getX() - startX > 100)
            {
                flipper.setInAnimation(this, R.anim.left_in);
                flipper.setOutAnimation(this, R.anim.left_out);
                flipper.showPrevious();// 显示前一页
            }
            // B.3向左滑动看后一页
            if (startX - event.getX() > 100)
            {
                flipper.setInAnimation(this, R.anim.right_in);
                flipper.setOutAnimation(this, R.anim.right_out);
                flipper.showNext();// 显示后一页
            }
            break;
        }
        // 手指离开
        case MotionEvent.ACTION_UP:
        {
            break;
        }

        }
        return super.onTouchEvent(event);
    }

    // 3.图片信息
    private ImageView getImageView(int resId)
    {
        ImageView image = new ImageView(this);
        // image.setImageResource(resId);//图片原图
        // 图片全屏
        image.setBackgroundResource(resId);
        return image;
    }
}

ViewFlipper:
实例:支持手势滑动
第一步:加入onTouchEvent(MotionEvent event)方法,通过switch(event.getAction()){}设置手指各种活动时的程序运行的方式。
第二步:通过ACTION_Down获取的起始位置startX=event.getX(),与ACTION_MOVE获取的位置做比较,判断手指是向左划还是向右划。
第三步:为滑动方式设置flipper常用方法,看显示前一页还是显示后一页

posted @ 2016-03-26 19:52  沉默的羊癫疯  阅读(163)  评论(0编辑  收藏  举报