轮播资源图片的实现

package com.loaderman.viewflipperdemo;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import android.widget.ViewFlipper;public class MainActivity extends AppCompatActivity implements View.OnTouchListener {private ViewFlipper     mFlipper;private GestureDetector mDetector; //手势检测@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mFlipper = (ViewFlipper) findViewById(R.id.flipper);mFlipper.setOnTouchListener(this);mDetector = new GestureDetector(new simpleGestureListener());mFlipper.startFlipping();//开始切换,注意,如果设置了时间间隔,想让它自动切换,一定要记得加它}@Overridepublic boolean onTouch(View v, MotionEvent event) {return mDetector.onTouchEvent(event);}private class simpleGestureListener extends GestureDetector.SimpleOnGestureListener {final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;//不加上onDown函数的话,onFling就不会响应@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "ondown", Toast.LENGTH_SHORT).show();return true;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {// Fling leftif (e1.getX() - e2.getX() > FLING_MIN_DISTANCE&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {mFlipper.showNext();Toast.makeText(MainActivity.this, "Fling Left", Toast.LENGTH_SHORT).show();} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {// Fling rightmFlipper.showPrevious();Toast.makeText(MainActivity.this, "Fling Right", Toast.LENGTH_SHORT).show();}return true;}}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.loaderman.viewflipperdemo.MainActivity"><ViewFlipperandroid:id="@+id/flipper"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_marginTop="10dp"android:flipInterval="3000" ><ImageViewandroid:layout_width="fill_parent"android:layout_height="300dip"android:scaleType="fitXY"android:src="@drawable/a"/><ImageViewandroid:layout_width="fill_parent"android:layout_height="300dip"android:scaleType="fitXY"android:src="@drawable/b"/><ImageViewandroid:layout_width="fill_parent"android:layout_height="300dip"android:scaleType="fitXY"android:src="@drawable/c"/><ImageViewandroid:layout_width="fill_parent"android:layout_height="300dip"android:scaleType="fitXY"android:src="@drawable/d"/></ViewFlipper>
</RelativeLayout>

效果:


动态加载广告图片的轮播实现

package com.loaderman.viewflipperdemo;import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.ViewFlipper;public class MainActivity extends AppCompatActivity {private ViewFlipper     flipper;private GestureDetector detector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {flipper = (ViewFlipper) findViewById(R.id.vf);flipper.addView(getImageView(R.drawable.a));//在一个根视图中动态添加子视图,可以根据new对象来进行子视图的增加和删减flipper.addView(getImageView(R.drawable.b));flipper.addView(getImageView(R.drawable.c));flipper.addView(getImageView(R.drawable.d));flipper.addView(getImageView(R.drawable.e));flipper.setInAnimation(inFromRightAnimation());//设置View进入屏幕时候使用的动画flipper.setOutAnimation(outToLeftAnimation());  //设置View退出屏幕时候使用的动画flipper.setFlipInterval(2000);//设置自动切换的间隔时间flipper.startFlipping();//开启切换效果flipper.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {return MainActivity.this.detector.onTouchEvent(event);//当有触屏事件作用于ViewFlipper时,把这个触屏事件返回给 GestureDetector手势识别器处理//如果想要把整个屏幕上的触屏事件都返回给 GestureDetector手势识别器处理,//而不单单是在ViewFlipper上发生触屏事件时就给 GestureDetector处理,//那么我们就不必为flipper单独设置onTouchListener()触摸监听器了,就只需要重写Activity中的onTouchEvent()方法,//在该方法中讲整个屏幕的触摸事件返回给手势识别器处理就行}});detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {//创建手势识别器并监听手势事件@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}/** 用户按下触摸屏、快速移动后松开即触发这个事件* e1:第1个ACTION_DOWN MotionEvent* e2:最后一个ACTION_MOVE MotionEvent* velocityX:X轴上的移动速度,像素/秒* velocityY:Y轴上的移动速度,像素/秒* 触发条件 :* X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒*/@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {//滑动事件回调函数final float FLING_MIN_DISTANCE = 100;//最小滑动像素final float FLING_MIN_VELOCITY = 150;//最小滑动速度if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE &&Math.abs(velocityX) > FLING_MIN_VELOCITY) {//X轴上的移动速度去绝对值进行比较//判断x轴坐标如果第一次按下时的坐标减去第二次离开屏幕时的坐标大于我们设置的位移,因为一个控件的原点是在左上角,就说明此时是向左滑动的//设置View进入屏幕时候使用的动画flipper.setInAnimation(inFromRightAnimation());//设置View退出屏幕时候使用的动画flipper.setOutAnimation(outToLeftAnimation());flipper.showNext();//显示下一个视图} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE &&Math.abs(velocityX) > FLING_MIN_VELOCITY) {//判断x轴坐标如果第二次离开屏幕时的坐标减去第一次按下时的坐标大于我们设置的位移,因为一个控件的原点是在左上角,就说明此时是向右滑动的flipper.setInAnimation(inFromLeftAnimation());flipper.setOutAnimation(outToRightAnimation());flipper.showPrevious();//显示上一个视图}return true;}@Overridepublic boolean onDown(MotionEvent e) {//手指按下屏幕时触发flipper.stopFlipping();//当触摸到ViewFlipper时,就让它停止自动滑动,如果要触摸到整个屏幕的任意一处就让它停止滑动,就按上面那个方法,不用设置ViewFlipper的触摸事件监听了new Handler().postDelayed(new Runnable() {//在当前线程(也即主线程中)开启一个消息处理器,并在3秒后发送flipper.startFlipping();这个消息给主线程,再让它自动滑动,从而来更新UI@Overridepublic void run() {flipper.startFlipping();//3秒后执行,让它又开始滑动}}, 3000);return true;}});}//创建一个ImageView对象private ImageView getImageView(int id) {ImageView imageView = new ImageView(this);imageView.setImageResource(id);return imageView;}/*** 定义从右侧进入的动画效果* @return*/protected Animation inFromRightAnimation() {Animation inFromRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, +1.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f);inFromRight.setDuration(200);inFromRight.setInterpolator(new AccelerateInterpolator());return inFromRight;}/*** 定义从左侧退出的动画效果* @return*/protected Animation outToLeftAnimation() {Animation outtoLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, -1.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f);outtoLeft.setDuration(200);outtoLeft.setInterpolator(new AccelerateInterpolator());return outtoLeft;}/*** 定义从左侧进入的动画效果* @return*/protected Animation inFromLeftAnimation() {Animation inFromLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f);inFromLeft.setDuration(200);inFromLeft.setInterpolator(new AccelerateInterpolator());return inFromLeft;}/*** 定义从右侧退出时的动画效果* @return*/protected Animation outToRightAnimation() {Animation outtoRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, +1.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f);outtoRight.setDuration(200);outtoRight.setInterpolator(new AccelerateInterpolator());return outtoRight;}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.loaderman.viewflipperdemo.MainActivity"><ViewFlipperandroid:id="@+id/vf"android:layout_width="match_parent"android:layout_height="wrap_content"android:autoStart="true"android:flipInterval="3000"android:inAnimation="@anim/anim_marque_in"android:outAnimation="@anim/anim_marque_out"/>
</RelativeLayout>

效果:


本文学习来源:http://blog.csdn.net/u013378580/article/details/52038255


转载于:https://www.cnblogs.com/loaderman/p/6477418.html

使用ViewFlipper实现广告图片的自动轮播的效果相关推荐

  1. web前端学习基础教程,简单的图片旋转木马自动轮播js代码

    一款简单的图片旋转木马自动轮播js代码,图片叠加轮播切换效果,支持点击左右箭头按钮控制切换. 案例效果图 案例源码: <!DOCTYPE html> <html lang=" ...

  2. 自动轮播图html代码适应手机,JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)...

    1.本文使用js+jQuery实现轮播图,需要引用jquery包,另种实现分别是animate实现自适应的轮播,以及transform平滑轮播(在注释代码中). 2.代码中的图片大家自己更换就可以了, ...

  3. js图片切换(点击左右按钮,小圆点切换图片,自动轮播)

    点击左右按钮,小圆点切换图片 <div><button><</button><button class="right">> ...

  4. Flutter PageView 实现的自动轮播图效果 Timer实现的自动轮播效果

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 文章底部扫码关注 [x2] ...

  5. jq实现自动轮播图效果

    我自己封装的一个图片自动轮播,下面是使用方法. <!DOCTYPE html> <html lang="zh"> <head><meta ...

  6. Android使用ViewFlipper实现图片上下自动轮播

    先看效果: 1.xml代码: <ViewFlipperandroid:id="@+id/viewFlipper"android:layout_width="matc ...

  7. Android开机自启自动轮播图片或自动轮播视频APP

    之前实验室有很多展示的设备,每次上电之后还需要单个点击打开每个展示设备开发好的APP,因为每个设备没有触屏,需要抱着电脑去实验室 挨个连接USB 使用scrcpy 挨个机器点开,每次搞完都是一身汗,作 ...

  8. JS_实现图片的自动轮播

    最终效果如图所示: (个人方法) 实现思路: 利用setInterval(),在一段间隔时间内,反复执行函数.函数为html中img标签的src属性修改值,分别为要轮播图片的路径. html代码: & ...

  9. Android广告条效果--使用Volley实现网络图片的自动轮播(仿淘宝、网易广告页轮播效果)

    最近在做自定义控件时,发现一个极其常用的效果--广告条,即图片的自动轮播效果.现在市面上大多数的APP软件都在使用这种展示广告的效果.闲来无事,我简单翻看了一下自己的手机软件,几乎都使用了这种图片自动 ...

  10. 定时器轮播图---(功能:自动轮播,左右箭头点击切换,点击圆点跳转图片)

    定时器轮播图 几个部分: 封装重复函数 左右箭头点击切换效果 自动轮播-定时器控制(模拟左箭头点击效果以显示出自动轮播的效果).鼠标移入停止,移出继续效果 点击圆点跳转相应页面(解决了点击后不继续轮播 ...

最新文章

  1. 短域名php,php生成短域名函数_PHP教程
  2. ValueStack基础:OGNL
  3. java openssl_verify_CryptoAPI:如何使用CryptVerifySignature验证来自OpenSSL或Java的DSA签名...
  4. python pil 模块将随机字符生成验证码
  5. Linux 下编译安装 PHP 5.6
  6. oracle--merge
  7. linux怎么添加DSL,如何在redhat上进行DSL 拨号
  8. 【ASP.NET】swfuplod图片上传
  9. 智慧城市——智慧社区解决方案
  10. 4D-Net for Learned Multi-Modal Alignment 论文笔记
  11. MySQL数据库的完美卸载
  12. inkscape推荐插件安装
  13. 前5名:Raspberry Pi龙卷风警告系统,用于物联网开发的4个开放式开发板等
  14. 软考真题的重要性不用再强调了吧
  15. 数据存储- 存储文件概述
  16. HTML----基础案例(与笔记对应)
  17. CSS层叠性(重要)
  18. QTableWidget实现复制粘贴
  19. android 设置画布颜色,如何在颜色变化的画布上在Android上绘制渐变颜色?
  20. 二级计算机的office用到哪些函数,计算机二级MS office excel中所用函数整理

热门文章

  1. Pandas系列(七)Pandas数据排序
  2. 求解偏微分方程开源有限元软件deal.II学习--Step 5
  3. MATLAB中的corrcoef函数求两个向量的相关系数。
  4. JS性能优化 之 FOR循环
  5. 2013年第四届蓝桥杯C/C++B组省赛题目解析
  6. apt update时出现签名无法验证,公钥失效的解决办法
  7. 【iCore4 双核心板_ARM】例程二十九:SD_IAP_FPGA实验——更新升级FPGA
  8. mxnet系列 tools 查看params的内容
  9. 扩展 MongoDB.Driver 支持实体
  10. 当spark遇见hbase