场景

效果

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

将需要滚动查看的照片复制到res/drawable下

这里只准备了两张bg01.jpg和bg02.jpg

在滚动时需要用到左进右出和左出右进的动画,所以在res下新建anim目录,在目录下新建四种动画的xml文件

具体代码参照示例代码。

然后打开布局文件activity_image_switcher.xml

将布局修改为相对布局RelativeLayout,并添加一个ImageSwitcher,设置其ID属性。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ImageSwitcherActivity"><ImageSwitcherandroid:id="@+id/imageSwitcher"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout>

然后来到ImageSwitcherActivity

首先声明一些私有变量,用来存储照片资源数组、数组索引、鼠标放下和离开的X坐标等。

   //图片资源数组private int[] arrayPicture = new int[]{R.drawable.bg01,R.drawable.bg02};private ImageSwitcher imageSwitcher;private  int index;private  float touchDowmX;private  float touchUpX;

然后通过id获取ImageSwitcher并设置其视图工厂

        //获取imageSwitchimageSwitcher =(ImageSwitcher) findViewById(R.id.imageSwitcher);//设置视图工厂imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {@Overridepublic View makeView() {ImageView imageView = new ImageView(ImageSwitcherActivity.this);imageView.setImageResource(arrayPicture[index]);return imageView;}});

然后设置ImageSwitcher的触碰的监听器

通过

event.getAction() == MotionEvent.ACTION_DOWN

判断如果是鼠标按下,则记录鼠标按下时的坐标。

否则通过

event.getAction() ==MotionEvent.ACTION_UP

判断如果是鼠标抬起,则记录抬起时的X坐标。

此时再通过

touchUpX-touchDowmX >100

即抬起时的X坐标减去落下时的X坐标大于100则认为是从左往右滑动。

此时图片的索引通过三目表达式进行判断。

index = index==0?arrayPicture.length-1:index-1;

如果当前索引为0,即为第一张照片时,则从左往右滑动后,应该是最后一张照片,即照片索引为图片数组的长度减一。

然后通过

 imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_in_left));

设置左边滑进的动画

再通过

imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_out_right));

设置右边滑出的动画

最后通过

imageSwitcher.setImageResource(arrayPicture[index]);

设置图片索引。

同理如果通过

touchDowmX - touchUpX >100

则认为是从右往左滑。

同样通过三目表达式

index = index==arrayPicture.length -1?0:index+1;

如果是最后一张照片,即索引为数组的长度 -1 ,则再往左滑 该是第一张照片,即索引为0  否则就索引+1。

然后通过

imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_in_right));

设置右边滑进的动画

再通过

imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_out_left));

设置左边滑出的动画

最后通过

imageSwitcher.setImageResource(arrayPicture[index]);

设置图片

完整示例代码

package com.badao.relativelayouttest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;public class ImageSwitcherActivity extends AppCompatActivity {//图片资源数组private int[] arrayPicture = new int[]{R.drawable.bg01,R.drawable.bg02};private ImageSwitcher imageSwitcher;private  int index;private  float touchDowmX;private  float touchUpX;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_image_switcher);//获取imageSwitchimageSwitcher =(ImageSwitcher) findViewById(R.id.imageSwitcher);//设置视图工厂imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {@Overridepublic View makeView() {ImageView imageView = new ImageView(ImageSwitcherActivity.this);imageView.setImageResource(arrayPicture[index]);return imageView;}});//设置imageSwitcher 触碰监听器imageSwitcher.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {//如果是鼠标按下if(event.getAction() == MotionEvent.ACTION_DOWN){//记录按下时的X坐标touchDowmX = event.getX();return  true;}else if(event.getAction() ==MotionEvent.ACTION_UP) //如果是鼠标抬起{//记录抬起时的X坐标touchUpX = event.getX();//如果是从左向右滑动if(touchUpX-touchDowmX >100){//如果是第一张图片则从左向右滑后下标是数组的长度-1,即最后一张,如果不是则索引-1index = index==0?arrayPicture.length-1:index-1;//设置左边滑进的动画imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_in_left));//设置右边滑出的动画imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_out_right));//设置图片索引imageSwitcher.setImageResource(arrayPicture[index]);}//否则认为是从右往左滑else if(touchDowmX - touchUpX >100){//如果是最后一张照片,即索引为数组的长度 -1 ,则再往左滑 该是第一张照片,即索引为0  否则就索引+1index = index==arrayPicture.length -1?0:index+1;//设置右边滑进的动画imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_in_right));//设置左边滑出的动画imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(ImageSwitcherActivity.this, R.anim.slide_out_left));//设置图片索引imageSwitcher.setImageResource(arrayPicture[index]);}}return false;}});}
}

示例代码下载

关注公众号:

霸道的程序猿

回复:

Android相册滑动代码

Android中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载)相关推荐

  1. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的 ...

  2. gPRC简介以及Java中使用gPRC实现客户端与服务端通信(附代码下载)

    场景 ProtoBuf的介绍以及在Java中使用protobuf将对象进行序列化与反序列化: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  3. android 横向滚动图片,Android使用Photoview实现图片左右滑动及缩放功能

    Android使用Photoview实现图片左右滑动及缩放功能 发布时间:2020-10-12 14:51:12 来源:脚本之家 阅读:119 作者:kuaizilanqiu 我想,不管是做什么样的a ...

  4. android中注册的账号密码储存在,Android中使用SharedPreferences完成记住账号密码的功能...

    效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 SharedPreferences会记录CheckBox的状态,如 ...

  5. android开发 转跳功能,如何在Android中利用Intent实现一个页面跳转功能

    如何在Android中利用Intent实现一个页面跳转功能 发布时间:2021-02-20 17:06:31 来源:亿速云 阅读:113 作者:Leah 本篇文章为大家展示了如何在Android中利用 ...

  6. android计算器功能实现,在android中利用 studio实现一个简单的计算器功能

    在android中利用 studio实现一个简单的计算器功能 发布时间:2020-11-07 15:35:20 来源:亿速云 阅读:168 作者:Leah 这篇文章将为大家详细讲解有关在android ...

  7. Ionic+Angular实现中英国际化(附代码下载)

    场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...

  8. JPA中实现双向多对多的关联关系(附代码下载)

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  9. ASP.NET的MVC中使用Cookie做身份验证(附代码下载)

    场景 ASP.NET的MVC中使用Session做身份验证(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1071 ...

最新文章

  1. linux下使用python_Python随笔(一)、Linux系统下python环境的安装
  2. Py之pandas:字典格式数据与dataframe格式数据相互转换并导出到csv
  3. java8的rmi_Java中的RMI
  4. python定义函数prime判断是否是素数_用自定义函数判断素数 用C语言编写自定义函数prime(int x),判断x是否为素数?...
  5. WordPress主题:Zibll子比主题 V4.0 绿色版
  6. 这套GitHub 1300星的NLP课程即将完结,视频授课,在线答疑丨课程
  7. (转)UML类图与类的关系详解
  8. php post提交函数,PHP curl get post 提交函数
  9. sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
  10. window11在注册表修改用户名后登陆不了账户
  11. 【单片机基础篇】共阴级四位数码管
  12. 2020杭州区块链国际周圆满闭幕,这一份金句集锦不能错过
  13. 浅谈Redis延迟测试方法
  14. 五子棋、Emacs计算器
  15. 苹果cms怎么更换模板教程
  16. 多项式求和 SDUT25044
  17. comsol学习中心:定义与材料选择
  18. 补码一位乘(布斯公式)
  19. PhysX物理引擎入门教程
  20. 计算机英语 病毒 教案,《计算机病毒》教学设计

热门文章

  1. php注册树模式,php基础设计模式大全(注册树模式、工厂模式、单列模式)
  2. RocketMQ源码:NameSrv启动全过程详解
  3. docke容器无法访问宿主主机的端口
  4. 「后端小伙伴来学前端了」关于 Vue中 Slot 插槽的使用,实用且也是组件中必会的一个知识,另外也可以实现父子组件之间通信
  5. vs2022 无法打开包括文件: “crtdbg.h” no such file or directory
  6. java窗口how2j_HOW2J java文件的创建及常用方法
  7. 重写了GD32VF103的启动脚本和链接脚本
  8. php怎么输出以前的时间,php输出指定时间以前时间格式的方法_PHP
  9. 安卓电视版linux,MythTV 30.0 发布,前端支持选择Android电视设备
  10. Java有趣的小功能_Java8 中有趣酷炫的小技巧你用到了那些