知识养成了思想,思想同时又在融化知识。这篇文章主要讲述Android中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载)相关的知识,希望能为你提供帮助。
场景
效果
文章图片
文章图片
文章图片
具体代码参照示例代码。
然后打开布局文件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"> < ImageSwitcher android: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; privateint index; privatefloat touchDowmX; privatefloat touchUpX;
然后通过id获取ImageSwitcher并设置其视图工厂
//获取imageSwitch imageSwitcher =(ImageSwitcher) findViewById(R.id.imageSwitcher); //设置视图工厂 imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public 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; privateint index; privatefloat touchDowmX; privatefloat touchUpX; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_switcher); //获取imageSwitch imageSwitcher =(ImageSwitcher) findViewById(R.id.imageSwitcher); //设置视图工厂 imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { ImageView imageView = new ImageView(ImageSwitcherActivity.this); imageView.setImageResource(arrayPicture[index]); return imageView; } }); //设置imageSwitcher 触碰监听器 imageSwitcher.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //如果是鼠标按下 if(event.getAction() == MotionEvent.ACTION_DOWN) { //记录按下时的X坐标 touchDowmX = event.getX(); returntrue; }else if(event.getAction() ==MotionEvent.ACTION_UP) //如果是鼠标抬起 { //记录抬起时的X坐标 touchUpX = event.getX(); //如果是从左向右滑动 if(touchUpX-touchDowmX > 100) { //如果是第一张图片则从左向右滑后下标是数组的长度-1,即最后一张,如果不是则索引-1 index = 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否则就索引+1 index = 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中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载)】Android相册滑动代码
推荐阅读
- Android中点击按钮获取星级评分条的评分
- Android Studio cmake突然没有语法高亮
- Android 真机测试网战大全
- LoadRunner性能测试-app压力测试
- 关于 Android 9.0 ClassNotFoundException: Didn't find class "org.apache.http.protocol.BasicHtt
- MyBatis Plus 自带BaseMapper解析
- Android中点击按钮获取string.xml中内容并弹窗提示
- logback源码阅读-Appender
- 利用kali生成木马远程控制安卓手机