`
473687880
  • 浏览: 535828 次
文章分类
社区版块
存档分类
最新评论

Android高手进阶教程(二十七)之---基于ViewFlipper实现的自定义新手指引控件.

 
阅读更多

第一步:新建Android工程ViewFlipperDemo:


第二步:新建AdverView.java代码如下:

package com.tutor.viewflipper;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
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;

/**
 * @author frankiewei.
 * 广告推荐插件,可以自定义img个数.
 */
public class AdvserView extends FrameLayout {
	
	/**
	 * 当前索引值.默认第一张图片被选中.
	 */
	private int mCurrentIndex = 0;
	
	/**
	 * 上下文.
	 */
	private Context mContext;
	
	/**
	 * 点击屏幕的X左边值.
	 */
	private float startX;
	
	/**
	 * 设备的宽度.
	 */
	private int mDisplayWidth;
	
	/**
	 * 从左到右进入的动画.
	 */
	private Animation mLeft2RightInAnimation;
	
	/**
	 * 从左到右出去动画.
	 */
	private Animation mLeft2RightOutAnimation;
	
	/**
	 * 从右到左进入动画.
	 */
	private Animation mRight2LeftInAnimation;
	
	/**
	 * 从右到左出去动画.
	 */
	private Animation mRight2LeftOutAnimation;
	
	/**
	 * 动画播放时间.
	 */
	private long duration = 1000;
	
	/**
	 * ViewFlipper控件,继承FrameLayout,图片的容器.
	 */
	private ViewFlipper mViewFlipper;
	
	/**
	 * 下面动态生成点点tip的容器.
	 */
	private LinearLayout mTipLinearLayout;
	
	/**
	 * 正常点点的Bitmap.
	 */
	private Bitmap mPointNorBitmap;
	
	/**
	 * 被选中的点点的Bitmap.
	 */
	private Bitmap mPointSelBitmap;
	
	
	/**
	 * 这里是要显示的广告图片的资源ID,可以自定义个数.
	 */
	private int[] imgResIds = {R.drawable.test1,R.drawable.test2,R.drawable.test3,
			R.drawable.test4,R.drawable.test5};
	
	public AdvserView(Context context) {
		super(context);
		setupViews();
	}
	
	public AdvserView(Context context,AttributeSet attr) {
		super(context,attr);
		setupViews();
	}
	
	private void setupViews(){
		
		mContext = getContext();		
		mDisplayWidth = getResources().getDisplayMetrics().widthPixels;
		
		mViewFlipper = new ViewFlipper(mContext);
		mTipLinearLayout = new LinearLayout(mContext);
		
		mPointNorBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.point_normal);
		
		mPointSelBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.point_selected);
		
		//将广告图片加入ViewFlipper.
		for(int i = 0; i < imgResIds.length; i++){
			ImageView imageView = new ImageView(mContext);
			imageView.setImageResource(imgResIds[i]);
			mViewFlipper.addView(imageView);
		}
		//将点点动态加入Linerlayout.
		for(int j = 0; j < imgResIds.length; j++){
			ImageView imageview = new ImageView(mContext);
			if(j == 0){
				imageview.setImageBitmap(mPointSelBitmap);
			}else{
				imageview.setImageBitmap(mPointNorBitmap);
			}
			
			mTipLinearLayout.addView(imageview);
		}
		addView(mViewFlipper);
		addView(mTipLinearLayout);
		mTipLinearLayout.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);
		
		//初始化动画.
		mLeft2RightInAnimation = new TranslateAnimation(-mDisplayWidth, 0, 0, 0);
		mLeft2RightInAnimation.setDuration(duration);
		mLeft2RightOutAnimation = new TranslateAnimation(0, mDisplayWidth, 0, 0);
		mLeft2RightOutAnimation.setDuration(duration);
		
		mRight2LeftInAnimation = new TranslateAnimation(mDisplayWidth, 0, 0, 0);
		mRight2LeftInAnimation.setDuration(duration);
		mRight2LeftOutAnimation = new TranslateAnimation(0, -mDisplayWidth, 0, 0);
		mRight2LeftOutAnimation.setDuration(duration);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			startX = event.getX();
			break;
		case MotionEvent.ACTION_UP:
			ImageView lastSelImageView  = (ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);
			//判断左右滑动切换图片.
			if(event.getX() > startX){
				mViewFlipper.setInAnimation(mLeft2RightInAnimation);
				mViewFlipper.setOutAnimation(mLeft2RightOutAnimation);
				mViewFlipper.showNext();
				mCurrentIndex++;
				if(mCurrentIndex > imgResIds.length -1){
					mCurrentIndex = 0;
				}
			
						
			}else if(event.getX() < startX){
				mViewFlipper.setInAnimation(mRight2LeftInAnimation);
				mViewFlipper.setOutAnimation(mRight2LeftOutAnimation);
				mViewFlipper.showPrevious();
				mCurrentIndex--;
				if(mCurrentIndex < 0){
					mCurrentIndex = imgResIds.length -1;
				}
			}
			ImageView imageview = (ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);
			imageview.setImageBitmap(mPointSelBitmap);
			lastSelImageView.setImageBitmap(mPointNorBitmap);
			break;
		default:
			break;
		}
		return true;
	}
}
第三步:修改ViewFlipperDemoActivity.java代码如下:

package com.tutor.viewflipper;

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

public class ViewFlipperDemoActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new AdvserView(this));
    }
}
第四步:运行效果如下:



分享到:
评论

相关推荐

    Android--开发--ActivityGroup + GridView + ViewFlipper 实现选项卡.rar

    这个压缩包文件"Android--开发--ActivityGroup + GridView + ViewFlipper 实现选项卡.rar"提供了使用ActivityGroup、GridView和ViewFlipper这三种组件来实现这一功能的方法。下面将详细解释这三个组件及其在选项卡...

    android自定义轮播控件基于ViewFlipper

    本文将深入探讨如何基于`ViewFlipper`实现一个自定义轮播控件。`ViewFlipper`是Android SDK提供的一种布局管理器,它允许我们轻松地在多个视图之间进行切换,非常适合用来实现轮播图的效果。 首先,我们要了解`...

    最简单的ViewFlipper实现图片跟随手势滑动

    在Android开发中,ViewFlipper是一个非常有用的控件,它允许开发者轻松地在多个视图之间切换,通常用于实现类似轮播图或者卡片翻页的效果。在这个“最简单的ViewFlipper实现图片跟随手势滑动”的教程中,我们将深入...

    安卓自定义控件相关-ViewFlipper水平滑动.rar

    【标题】:“安卓自定义控件相关-ViewFlipper水平滑动.rar”指的是一个关于在Android平台上使用ViewFlipper实现水平滑动效果的教程或示例项目。ViewFlipper是Android SDK提供的一种布局容器,它允许我们在两个或多个...

    Android ViewFlipper实现页面的滑动切换

    在Android开发中,ViewFlipper是一个非常实用的控件,用于在多个视图之间进行切换,通常用于实现页面滑动效果。ViewFlipper是ViewAnimator的子类,它提供了自动翻页、手动翻页以及动画过渡等特性。下面将详细探讨...

    Android实例源码-自定义控件类安卓源代码(20例).zip

    Android实例源码-自定义控件类安卓源代码(20例) androd自定义有进度的圆形进度条.zip Android 4.0风格中文滚动输入.zip Android Form EditText 验证输入合法性的编辑框.zip Android 自定义头部控件,简单易用.rar ...

    Android使用ViewFlipper实现Switch动画特效。

    本篇将深入探讨如何利用ViewFlipper实现Switch动画特效,以及如何通过自定义控件和anim资源文件来完成这一过程。 首先,`ViewFlipper`是`ViewGroup`的一个子类,它能够包含多个子视图(如ImageView、TextView等),...

    Android 滑动效果ViewFlipper

    **Android滑动效果ViewFlipper详解** 在Android开发中,我们常常需要实现各种动画效果来提升用户体验,其中滑动切换视图是一种常见的交互方式。`ViewFlipper`是Android SDK提供的一种布局容器,它允许我们在多个子...

    开学实验课-ActivityGroup + GridView + ViewFlipper 实现选项卡

    开学实验课-ActivityGroup + GridView + ViewFlipper 实现选项卡 开学实验课-ActivityGroup + GridView + ViewFlipper 实现选项卡 开学实验课-ActivityGroup + GridView + ViewFlipper 实现选项卡 开学实验课-...

    Android ViewFlipper水平滑动Demo.zip

    在Android开发中,ViewFlipper是一个非常实用的控件,它允许开发者轻松地在多个视图之间进行切换,常用于实现动画效果,如轮播图、广告栏等。本示例"Android ViewFlipper水平滑动Demo"着重展示了如何利用ViewFlipper...

    ViewFlipper控件实现各种屏幕切换

    在Android开发中,ViewFlipper是一个非常实用的控件,用于在多个视图之间进行平滑的切换,常被用来实现类似轮播图或者页面切换的效果。本教程将深入讲解如何利用ViewFlipper和anim动画文件来实现各种屏幕切换效果。 ...

    ViewFlipper实现左右切换

    在Android开发中,ViewFlipper是一个非常实用的控件,它允许我们轻松地在多个视图之间进行切换,常用于实现类似轮播图或者卡片左右滑动的效果。本篇文章将详细解析如何使用ViewFlipper来实现左右切换的功能,并结合...

    android中使用ViewFlipper实现滑动翻页示例

    在Android开发中,ViewFlipper是一个非常有用的布局控件,它允许我们轻松地实现滑动翻页的效果。这个示例将向我们展示如何在应用程序中使用ViewFlipper来创建一个动态翻页界面,使得用户可以通过手势或编程方式切换...

    Android应用源码之ViewFlipper1.zip

    【Android应用源码之ViewFlipper1.zip】是一个关于Android应用程序开发的源代码包,主要聚焦于`ViewFlipper`组件的使用。`ViewFlipper`是Android SDK提供的一种视图切换工具,常用于实现类似轮播图或者卡片翻转的...

    android ViewFlipper 图片拖动 新手导航效果

    在Android开发中,ViewFlipper是一个非常实用的控件,用于在多个视图之间进行切换,通常用于实现动画效果,比如图片轮播、页面滑动等。本教程将引导新手了解如何利用ViewFlipper实现图片拖动的导航效果。 首先,...

    android viewflipper 图片滑动demo

    在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,常用于实现滑动浏览效果,如教程、引导页或者轮播图等。本示例“android viewflipper 图片滑动demo”正是这样一个...

    android 利用ViewFlipper来实现滑动切换

    在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地实现在多个视图之间进行滑动切换的效果。这种效果常见于各种应用程序,如轮播图、页面导航等。下面我们将深入探讨如何利用ViewFlipper...

    Android高级应用源码-Gallery+ImageSwitcher+ViewFlipper实现手机查看壁纸效果.zip

    这个压缩包"Android高级应用源码-Gallery+ImageSwitcher+ViewFlipper实现手机查看壁纸效果.zip"提供了这样的功能实现,它结合了Gallery、ImageSwitcher和ViewFlipper三个重要的组件,以创建一个动态且流畅的壁纸查看...

    Android基础控件——ViewFlipper的使用,仿淘宝头条垂直广告条

    在Android开发中,ViewFlipper是一个非常实用的控件,它允许我们轻松地在多个视图之间进行切换,常用于实现动画效果,如轮播图、广告条等。本篇文章将详细讲解如何利用ViewFlipper来创建一个类似淘宝头条垂直广告条...

    Android-ViewFlipper基于android的上下轮播显示消息的控件

    从`ViewFlipper-master`这个文件名来看,这是一个开源项目,包含了对原生ViewFlipper的改进源码。开发者可能在项目中提供了详细的实现细节和使用方法。如果要深入学习和应用这个控件,建议查看源码,研究其内部的...

Global site tag (gtag.js) - Google Analytics