码迷,mamicode.com
首页 > 移动开发 > 详细

Android 中 ViewFlipper 的简单实例

时间:2015-06-15 09:19:29      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:viewflippe   viewpager   flipper   android滑动   滑动预览   

技术分享

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />

</RelativeLayout>

Main.java

package com.wty.mydemoviewflipper;

import android.app.Activity;
import android.os.Bundle;

import com.wty.mydemoviewflipper.wiget.ViewFlipperView;

public class Main extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new ViewFlipperView(this));
    }
}

IAdImages.java

package com.wty.mydemoviewflipper.wiget;

import com.wty.mydemoviewflipper.R;

/**
 * 图片信息接口
 * @author vhreal
 *
 */
public interface IAdImages {

    /**
     * 广告图片
     */
    int[] adImages = {
            R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04, R.drawable.img05,
            R.drawable.img06, R.drawable.img07, R.drawable.img08, R.drawable.img09, R.drawable.img10
    };
}

ViewFlipperView.java

package com.wty.mydemoviewflipper.wiget;

import android.content.Context;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ViewFlipper;

import com.wty.mydemoviewflipper.R;

/**
 * 这是一个类似于ViewFlipper的Wiget。
 * @author vhreal
 *
 */
public class ViewFlipperView extends FrameLayout implements IAdImages {

    private Context context;                           // 调用方的上下文
    private int currentAdImgIndex;                     // 当前广告图片索引
    private Animation left2RightInAnimation;           // 广告图片从左到右进入屏幕动画
    private Animation left2RightOutAnimation;          // 广告图片从左到右出去屏幕动画
    private Animation right2LeftInAnimation;           // 广告图片从右到左进入屏幕动画
    private Animation right2LeftOutAnimation;          // 广告图片从右到左出去屏幕动画
    private int animationDuration = 300;               // 动画花费时间1000毫秒
    private ViewFlipper mViewFlipper;                  // 滑动页面控件
    private LinearLayout mTipLinearLayout;             // 下方点点控件
    private float startX = 0;                          // touch action down 时的x坐标
    private float endX = 0;                            // touch action up 时的x坐标

    public ViewFlipperView(Context context) {
        super(context);
        this.context = context;
        setView();
    }

    /**
     * 显示View
     */
    private void setView(){

        // 初始化
        int screenWidth = getResources().getDisplayMetrics().widthPixels;
        mViewFlipper = new ViewFlipper(context);
        mTipLinearLayout = new LinearLayout(context);
        // 初始化动画
        left2RightInAnimation = new TranslateAnimation(-screenWidth, 0, 0, 0);
        left2RightInAnimation.setDuration(animationDuration);
        left2RightOutAnimation = new TranslateAnimation(0, screenWidth, 0, 0);
        left2RightOutAnimation.setDuration(animationDuration);
        right2LeftInAnimation = new TranslateAnimation(screenWidth, 0, 0, 0);
        right2LeftInAnimation.setDuration(animationDuration);
        right2LeftOutAnimation = new TranslateAnimation(0, -screenWidth, 0, 0);
        right2LeftOutAnimation.setDuration(animationDuration);


        // 将广告图片加入ViewFlipper
        for(int i=0; i<adImages.length; i++){
            ImageView image = new ImageView(context);
            image.setImageResource(adImages[i]);
            mViewFlipper.addView(image);
        }
        addView(mViewFlipper);

        // 将图片索引点动态加入
        for(int i=0; i<adImages.length; i++){
            ImageView image = new ImageView(context);
            if(i == 0){
                image.setImageResource(R.drawable.point_selected);
            }else{
                image.setImageResource(R.drawable.point_normal);
            }
            image.setPadding(5, 0, 5, 20);
            mTipLinearLayout.addView(image);
        }
        // 放置在左下角
        mTipLinearLayout.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
        addView(mTipLinearLayout);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            startX = event.getX();
            break;
        case MotionEvent.ACTION_UP:

            endX = event.getX();
            // 先保存上一个点
            ImageView lastTipImageView = (ImageView) mTipLinearLayout.getChildAt(currentAdImgIndex);

            if(currentAdImgIndex > 0 && endX > startX){// 查看前一页的广告

                mViewFlipper.setInAnimation(left2RightInAnimation);
                mViewFlipper.setOutAnimation(left2RightOutAnimation);
                mViewFlipper.showPrevious();
                currentAdImgIndex--;
                if(currentAdImgIndex < 0){
                    currentAdImgIndex = 0;
                }
            }

            if(currentAdImgIndex < adImages.length-1 && endX < startX){// 查看后一页的广告

                mViewFlipper.setInAnimation(right2LeftInAnimation);
                mViewFlipper.setOutAnimation(right2LeftOutAnimation);
                mViewFlipper.showNext();
                currentAdImgIndex++;
                if(currentAdImgIndex > adImages.length-1){
                    currentAdImgIndex = adImages.length-1;
                }
            }

            // 根据currentAdImgIndex改变底部点的状态
            ImageView currTipImageView = (ImageView) mTipLinearLayout.getChildAt(currentAdImgIndex);
            lastTipImageView.setImageResource(R.drawable.point_normal);
            currTipImageView.setImageResource(R.drawable.point_selected);

            break;      
        }   
        return true;
    }
}

技术分享

Android 中 ViewFlipper 的简单实例

标签:viewflippe   viewpager   flipper   android滑动   滑动预览   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/46495621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!