热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

AndroidViewFlipper简单用法解析

这篇文章主要为大家详细介绍了AndroidViewFlipper简单用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

ViewFlipper和ViewPager挺像的,都是一个view容器。内部可以添加多个view,只是viewpager可以通过左右滑动来切换view,而viewFlipper则没有这个功能,所以需要在它上面监听手势。比较方便的是它不用使用适配器就能添加view,所以比较方便。

 

首先在布局文件中定义这个控件: 

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  
  

2.在代码中找到并且添加view 

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    detector = new GestureDetector(this);
    flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper01);

    flipper.addView(addTextView("page 1"));//添加view到flipper中,这里添加5个textView
    flipper.addView(addTextView("page 2"));
    flipper.addView(addTextView("page 3"));
    flipper.addView(addTextView("page 4"));
    flipper.addView(addTextView("page 5"));
  }


/**
   * @param text
   * @return 一个textView对象
   */
  private View addTextView(String text) {
    TextView tv = new TextView(this);
    tv.setText(text);
    tv.setTextSize(40);
    tv.setTextColor(0xff000000);
    tv.setGravity(Gravity.CENTER);
    return tv;
  }

3.通过touch监听手势来切换view 

@Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
      float velocityY) {
    if (e1.getX() - e2.getX() > 120) {
      this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
      this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
      this.flipper.showNext();//切换到下一个view
      return true;
    } else if (e1.getX() - e2.getX() <-120) {
      this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
      this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
      this.flipper.showPrevious();
      return true;
    }
    return false;
  }

下面是Activity的完整代码: 

package com.xu81.testflip;

import android.app.Activity;
import android.app.ActivityManager.RecentTaskInfo;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class TestFlip extends Activity implements OnGestureListener {

  private ViewFlipper flipper;

  private GestureDetector detector;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    detector = new GestureDetector(this);
    flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper01);

    flipper.addView(addTextView("page 1"));//添加view到flipper中,这里添加5个textView
    flipper.addView(addTextView("page 2"));
    flipper.addView(addTextView("page 3"));
    flipper.addView(addTextView("page 4"));
    flipper.addView(addTextView("page 5"));
  }

  /**
   * @param text
   * @return 一个textView对象
   */
  private View addTextView(String text) {
    TextView tv = new TextView(this);
    tv.setText(text);
    tv.setTextSize(40);
    tv.setTextColor(0xff000000);
    tv.setGravity(Gravity.CENTER);
    return tv;
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    return this.detector.onTouchEvent(event);
  }

  @Override
  public boolean onDown(MotionEvent e) {
    // TODO Auto-generated method stub
    return false;
  }

  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
      float velocityY) {
    if (e1.getX() - e2.getX() > 120) {
      this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
      this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
      this.flipper.showNext();//切换到下一个view
      return true;
    } else if (e1.getX() - e2.getX() <-120) {
      this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
      this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
      this.flipper.showPrevious();
      return true;
    }
    return false;
  }

  @Override
  public void onLongPress(MotionEvent e) {
    // TODO 自动生成的方法存根
    
  }

  @Override
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
      float distanceY) {
    // TODO 自动生成的方法存根
    return false;
  }

  @Override
  public void onShowPress(MotionEvent e) {
    // TODO 自动生成的方法存根
    
  }

  @Override
  public boolean onSingleTapUp(MotionEvent e) {
    // TODO 自动生成的方法存根
    return false;
  }


}

动画文件: 

push_left_in.xml 

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  


push_left_out.xml 

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  


push_right_in.xml 

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  


push_right_out.xml 

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  

源码下载:http://xiazai.jb51.net/201609/yuanma/AndroidViewFlip(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 在Android开发中,BroadcastReceiver(广播接收器)是一个重要的组件,广泛应用于多种场景。本文将深入解析BroadcastReceiver的工作原理、应用场景及其具体实现方法,帮助开发者更好地理解和使用这一组件。通过实例分析,文章详细探讨了静态广播的注册方式、生命周期管理以及常见问题的解决策略,为开发者提供全面的技术指导。 ... [详细]
  • 《Spring in Action 第4版:全面解析与实战指南》
    《Spring in Action 第4版:全面解析与实战指南》不仅详细介绍了Spring框架的核心优势,如简洁易测试、低耦合特性,还深入探讨了其轻量级和最小侵入性的设计原则。书中强调了声明式编程的优势,并通过基于约定的方法简化开发流程。此外,Spring的模板机制有效减少了重复代码,而依赖注入功能则由容器自动管理,确保了应用的灵活性和可维护性。 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 将解压缩版Tomcat集成至系统服务
    将解压缩版Tomcat集成至系统服务的方法如下:首先,在命令行中导航至Tomcat的`bin`目录,运行`service.bat install`命令以安装服务。需要注意的是,服务名称和显示名称已在`service.bat`脚本中预设,默认情况下会随不同版本有所变化。此外,建议检查并配置相关参数,确保服务能够稳定运行。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 题目探讨了在无向图中求解点连通数的问题,具体涉及UVA1660和POJ1966两个经典问题。通过最小割算法的应用,分析了如何高效地确定网络中的关键节点和路径,为电缆电视网络的优化设计提供了理论支持。该研究不仅验证了最小割算法的有效性,还为进一步探索复杂网络的连通性和鲁棒性奠定了基础。 ... [详细]
  • 在 POJ1651 的乘法谜题挑战中,如果选手按相反顺序选择卡片,即先选 50,再选 20,最后选 1,则最终得分会有所不同。题目要求输入的第一行包含... 改写后的摘要:在 POJ1651 的乘法谜题挑战中,如果选手按照逆序选取卡片,例如依次选择 50、20 和 1,最终的得分将发生变化。题目首先要求输入的第一行包括... ... [详细]
  • Workbench 流固耦合分析:选择经典APDL还是现代Workbench?一文帮你做出明智决策
    随着ACT插件的推出,经典版APDL的大部分高级功能已成功迁移至现代Workbench平台。本文将深入探讨Workbench在流固耦合分析中的应用,帮助读者在经典APDL与现代Workbench之间做出明智的选择。通过对比两者的功能、易用性和扩展性,我们将为用户提供全面的参考信息,助力其在工程仿真领域取得更好的成果。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
author-avatar
手机用户2502908277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有