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

Android ViewFlipper水平滑动控件应用指南 本文还有配套的精品资源,点击获取 简介:ViewFlipper是Android中用于实现视图切换的控件,支持多种动画效果,包括水平滑动。本资源详细讲解了如何利用ViewFlipper实现水平滑动效果,包括其属性设置、动画的创建与应用以及视图切换的触发方法。开发者将能够通过本教程创建丰富的界面交互体验。 1. ViewFlipper控件概念与应用 1.1 View... 阅读详情

第一步:新建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-小圆点指示器的viewpager使用非常方便自动轮播图片 小圆点指示器,自动轮播图片,dot circle indicator viewpager auto looping 立即下载

相关推荐

android 定位+百度推送+引导页轮播+判断第一次进入

android 定位+百度推送+引导页轮播,黑土公社app源码

使用Flipper调试应用

【代码】使用Flipper调试应用。

qq_53761321的博客 1965

安卓欢迎界面引导页面viewpager相关-Android的APP应用中最常用的APP启动引导页常见的4种引导项目方式splashviewpageviewflipperscrollview.rar

Android的APP应用中最常用的APP启动引导页,常见的4种引导项目方式:splash,viewpage,viewflipper,scrollview.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

自定义viewFlipper

自定义viewFlipper的使用 viewFlipper是ViewAnimator的子类,而ViewAnimator又是继承自FrameLayout,而FrameLayout就是平时基本上只显示一个子视图的布局,由于FrameLayout下不好确定子视图的位置,所以很多情况下子视图之前存在相互遮挡,这样就造成了很多时候我们基本上只要求FrameLayout显示一个子视图,然后通过某些控制来实现切...

zhakesipailuo的博客 747

Android之ViewPager实现引导页(第一次打开App进入引导页,第二次直接进入APP主页面)

Android实现引导页(第一次打开App进入引导页,第二次直接进入APP主页面) 博客地址:http://blog.csdn.net/dickyqie/article/details/61413419

Android自定义ViewFlipper实现滚动效果

主要为大家详细介绍了Android自定义ViewFlipper实现滚动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

如何让2012-2015年老款Mac完美运行最新macOS?OCLP-Mod技术方案全解析

你是否还在为手中的老款Mac无法升级到最新macOS而苦恼?看着那些2012-2015年间生产的MacBook、iMac和Mac mini,硬件性能依然强劲,却因为苹果官方的限制而停留在过时的系统版本上。今天,我要向你介绍一个革命性的解决方案——OCLP-Mod,这个开源项目能让你的老款Mac重获新生,流畅运行从Big Sur到Sequoia的所有现代macOS系统! ## 老款Mac的困境与O

gitblog_00959的博客 1003

Edge浏览器IE模式全攻略:从企业应用到老旧网站兼容(含常见问题解答)

本文详细解析了微软Edge浏览器的IE模式,这是解决企业遗留系统与老旧网站兼容性问题的关键技术。文章从核心原理出发,提供了从个人用户临时启用到企业级组策略部署的完整配置指南,并深入探讨了文档模式调优、ActiveX控件处理等高级技巧,最后汇总了常见问题排查与安全实践,帮助用户高效平衡兼容性与现代化浏览体验。

weixin_29227425的博客 612

文章索引

移动web开发 1.移动web开发(一)——移动web开发必备知识 2.移动web开发(二)——viewport 3.移动web开发(三)——字体使用 4.移动web开发(四)——X-UA-Compatible     Android开发 1.Android开发(一)——全屏或者取消标题栏  2.Android开发(二)——自定义圆形控件的使用CircleImageView 3...

weixin_34087307的博客 128

水下井口装置及钻杆建模

内容:海上油气资源开采的过程中,通常会由海上钻井平台下入钻杆连接到海底井口装置。OrcaFlex软件可进行各种海洋工程结构动态分析,通过各项数据的输入,能够很方便地进行水下井口装置及钻杆建模。直接使用软件New Line及new vessel功能,再设置模型的各项参数(几何属性、弯曲刚度、轴线刚度、扭转刚度、泊松比等)即可建成井口装置及钻杆模型。 设置管线的几何属性:主要包括管线的内外径、壁厚、...

s0302017的博客 1148

深度学习-算法工程师岗位面试常见问题及解答

一、相关的问题 深度学习优化学习方法(一阶、二阶) 一阶方法:随机梯度下降(SGD)、动量(Momentum)、牛顿动量法(Nesterov动量)、AdaGrad(自适应梯度)、RMSProp(均方差传播)、Adam、Nadam。 二阶方法:牛顿法、拟牛顿法、共轭梯度法(CG)、BFGS、L-BFGS。 自适应优化算法有哪些?(Adagrad(累积梯度平方)、RMSProp(累积梯度平方的滑动平均)、Adam(带动量的RMSProp,即同时使用梯度的一、二阶矩))。 梯度下降陷入局部最优有什么解决

nobles007820的博客 2924

viewflipper_Android ViewFlipper示例教程

viewflipperIn this tutorial we’ll discuss and implement Android ViewFlipper. ViewFlipper in android is mainly used in cases when we need to transform one view into another. 在本教程中,我们将讨论并实现Android ViewF...

从零开始的教程世界 247

X猫免费小说安卓逆向分析

七猫免费小说安卓逆向分析 难度(♥♥) 文章目录七猫免费小说安卓逆向分析 难度(♥♥)1. 查壳2. 抓包分析3. sign1. Frida-rpc2. Native函数分析快3点了. 睡觉~ 白天再继续写! 1. 查壳 我这边使用的是ApkTool, 拖进去显示未加壳。 2. 抓包分析 POST https://xiaoshuo.wtzw.com/api/v1/login/index HTTP/1.1 net-env: 1 channel: qm-cbcpa056_wm is-white: 0 platf

Qiled的博客 4369

android ViewFlipper 详细用法,附源代码+图片资源

ViewFlipper主要用在几个视图自动切换, ViewPage用在滑动手势切换视图,并在视图添加很多功能。 ViewFragment在几个Fragment之间切换滑动,因为Fragment有自己的周期,比Viewpage更加好控制。 源代码如下,用 ViewFlipper实现图片的自动切换,并添加了动画效果。。 MainActivity代码: package co

ITzhongzi的博客 713

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

Claude Code 100个真实案例 - 用AI批量清洗Excel脏数据(10万行3分钟搞定)

本案例展示如何使用 Claude Code 搭建一个强大的 Excel 数据清洗工具。支持自动检测和处理空值、重复行、格式错误、异常值等常见脏数据问题,批量处理10万行数据只需3分钟。

yueyeguzhuo的专栏 39

Android利用ViewFlipper实现屏幕切换动画效果,kotlin匿名内部类this

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android” android:layout_width=“fill_parent” android:layout_height=“fill_parent” android:background="#ffffff" android:orientation=“vertical” andr

m0_66264134的博客 314

高效与灵活相结合:Verilog编写的跨时钟域循环缓冲控制器解析

循环缓冲区,也被称作循环队列、环形缓冲区,是一种数据结构,其主要特性是使用一个固定大小的缓冲区作为数据的存储空间,这个缓冲区在逻辑上被视作是首尾相接的。虽然Verilog是一种常用的硬件描述语言,被广泛应用在FPGA和ASIC设计中,但是在描述循环缓冲区时,它并没有提供一种直接且灵活的方式来指定循环缓冲区的参数,如字长、缓冲区深度、缓冲区数量等。这给硬件设计带来了一定的不便。同时,该控制器的设计也充分考虑了硬件资源的利用率,通过优化的算法和数据结构,使得在实现高性能的同时,也能够有效地节省硬件资源。

qq_38334677的博客 1223

Android之ViewFlipper的简单使用

大家都使用过ViewPager,但是ViewPager还有一个兄弟,那就是ViewFlipper。两者的名字非常相似,我们可以将ViewPager理解成“一页一页的视图”,ViewFlipper则是“快速翻转的视图”,但后者的使用率却远不及前者,不过这并不意味着ViewFlipper就弱了。现在我们就来拜访一下经常被冷落的ViewFlip...

weixin_34221332的博客 533

流体动力学仿真软件:SU2_(1).SU2简介与安装

SU2 是一个开源的计算流体动力学(CFD)和计算结构动力学(CSD)仿真软件,由斯坦福大学的航空航天系开发。它主要用于解决流体动力学问题,包括但不限于空气动力学、热力学、化学反应流等。SU2 的特点在于其高度的灵活性和可扩展性,使其成为科研和工业领域中非常受欢迎的工具。SU2 采用有限体积法(FVM)和有限元法(FEM)进行数值求解,支持多种物理模型和求解器,如 Euler 方程、Navier-Stokes 方程、RANS 方程等。

kkchenjj的博客 1313

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Android高手进阶教程(二十六)之---Android超仿Path菜单的实现!
下一篇: Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
Android_Tutor
博客等级 码龄17年 1万+粉丝 122原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值