当前位置: 首页 > article >正文

ViewFlipper的使用

ViewFlipper的介绍

ViewFlipper是一个切换控件,本质是一个FrameLayout,所以可以添加子控件,让这些子控件有切换效果并可以设置切换动画。可以用来做轮播图、跑马灯等效果。

ViewFlipper的基本方法

在xml布局中的方法介绍:android:autoStart:   设置自动加载下一个Viewandroid:flipInterval:设置View之间切换的时间间隔android:inAnimation: 设置切换View的进入动画android:outAnimation:设置切换View的退出动画在代码中也可以设置:isFlipping:     判断View切换是否正在进行setFilpInterval:设置View之间切换的时间间隔startFlipping:  开始View的切换,而且会循环进行stopFlipping:   停止View的切换setOutAnimation:设置切换View的退出动画setInAnimation: 设置切换View的进入动画showNext:       显示ViewFlipper里的下一个ViewshowPrevious:   显示ViewFlipper里的上一个ViewgetCurrentView() 获取当前展示的View

实战

写一个简单的轮播图功能,只需要在ViewFilpper添加ImageView控件来显示图片,并设置切换动画,这样实现自动滑动。手动滑动可以借助手势来实现。代码如下:

public class MainActivity extends AppCompatActivity {private ViewFlipper viewFlipper;private GestureDetectorCompat gestureDetectorCompat;private boolean isSlide = false;private boolean currentDirection = true;private boolean preDirection = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewFlipper = (ViewFlipper) findViewById(R.id.viewFilter);addImageView(R.mipmap.banner1);addImageView(R.mipmap.banner2);addImageView(R.mipmap.banner3);switchAnimation(true, true);viewFlipper.setClickable(true);//不设置这个在手势里就不会响应(onFling、onScroll、双击事件)viewFlipper.setLongClickable(true);gestureDetectorCompat = new GestureDetectorCompat(this, new GestureListener());viewFlipper.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {return gestureDetectorCompat.onTouchEvent(event);}});}private class GestureListener extends GestureDetector.SimpleOnGestureListener {@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {Log.d("lx", "velocityX" + velocityX + ";velocityY" + velocityY + "isFlipping" + viewFlipper.isFlipping());if (isSlide == false) {if (e1.getX() - e2.getX() > 20 && Math.abs(velocityX) > 0) {switchAnimation(false, true);viewFlipper.showNext();}if (e2.getX() - e1.getX() > 20 && Math.abs(velocityX) > 0) {switchAnimation(false, false);viewFlipper.showPrevious();}}Log.d("lx", "onFling");return super.onFling(e1, e2, velocityX, velocityY);}}/*** 动画是否从右到左* true 从右到左,false 从左到右** @param right_to_left*/private void switchAnimation(boolean isFirst, final boolean right_to_left) {//preDirection=currentDirection;//  currentDirection=right_to_left;//   if(isFirst||(isFirst==false&&preDirection!=currentDirection)) {if (right_to_left) {viewFlipper.clearAnimation();Animation in = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_in);Animation out = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_out);viewFlipper.setOutAnimation(out);viewFlipper.setInAnimation(in);} else {viewFlipper.clearAnimation();Animation in = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_in_);Animation out = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_out_);viewFlipper.setOutAnimation(out);viewFlipper.setInAnimation(in);}if (viewFlipper.getInAnimation() != null) {viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {isSlide = true;}@Overridepublic void onAnimationEnd(Animation animation) {Log.d("lx", "onAnimationEnd"+right_to_left);isSlide = false;if (right_to_left == false) {switchAnimation(false,true);}}@Overridepublic void onAnimationRepeat(Animation animation) {}});}// }}private void addImageView(int resid) {ImageView imageView = new ImageView(this);imageView.setImageResource(resid);imageView.setAdjustViewBounds(true);ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);viewFlipper.addView(imageView, layoutParams);}@Overrideprotected void onStart() {super.onStart();viewFlipper.startFlipping();}@Overrideprotected void onStop() {super.onStop();viewFlipper.stopFlipping();}
}

总结

ViewFlipper的用法比较简单,如有问题,欢迎在下方留言参与讨论。

http://www.lryc.cn/news/2414017.html

相关文章:

  • 我的问题集
  • JPEG的编码步骤
  • 找不到wpcap.dll解决方法
  • 【自然语言处理】统计中文分词技术(一):1、分词与频度统计
  • 利用连按 5 下 Shift 漏洞破解 win7 开机密码(原理以及实现)
  • 【运维】Windows下MRTG入门教程
  • PHP学习记录:PHP快速入门,一篇即可!
  • 超好用的清理软件Wise Disk Cleaner X
  • ClearCase 入门指南-管理员学习路径
  • 智慧方勃探秘江西:走进赣鄱大地的历史与传承
  • Javascript----文件操作
  • 面向对象设计的七大原则
  • Mandelbrot集的最新变化形态一览——MandelBox,Mandelbulb,Burning Ship,NebulaBrot
  • 国内十大免费网络相册
  • WordPress爱导航主题源码
  • Linux系统下如何隐藏自己的进程?
  • 汉字区位码查询与算法
  • removeAttribute() 方法删除指定的属性
  • 一个NB-IoT/4G模组的AT拨号联网流程
  • 纳什均衡及经典案例(2)
  • 如何解决计算机漏洞,我的电脑扫描发现存在这么多安全漏洞,怎么解决呢?
  • office运行时错误,部分系统文件可能丢失或已损坏(错误代码:0x80040154)
  • 动漫迷必备网站
  • ORACLE 10g 安装教程[图文]
  • SQL 常见的几种分页
  • 不看后悔!国内外程序员接单平台大合集!带你一次性了解各个热门接单平台!
  • 阿里 新零售领域的多模态知识图谱的建设与应用
  • 二进制0和负0的补码反码源码
  • JS压缩谁最强?对比5款JS代码压缩工具
  • 系统分析师——论文篇(三)