Android实现左右滑动切换图片
作者:Biu→Biu丶 时间:2021-06-20 10:51:30
简要说明
本文采用ImageSwitcher实现左右滑动切换图片。首先调用setFactory方法,设置视图工厂;然后设置手指触碰监听,判断左滑右滑进而切换图片。
本地图片
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageSwitcher
android:id="@+id/imageSwitcher"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
activity
package com.imageSwitcher
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// 本地图片
private val images = arrayOf(R.drawable.t1,
R.drawable.t2,
R.drawable.t3,
R.drawable.t4,
R.drawable.t5,
R.drawable.t6)
// 网络图片
private val urlImages = arrayOf("http://ip/aa.jpg",
"http://ip/bb.jpg",
"http://ip/cc.jpg",
"http://ip/dd.jpg",
"http://ip/ee.jpg",
"http://ip/ff.jpg")
private var index = 0
private var touchDownX: Float = 0f
private var touchUpX: Float = 0f
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initView()
}
private fun initView() {
// 设置视图工厂
imageSwitcher.setFactory {
val imageView = ImageView(this@MainActivity)
imageView.setImageResource(images[index])
imageView
}
// 设置触摸监听
imageSwitcher.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(view: View?, event: MotionEvent?): Boolean {
//判断动作是不是按下
if (event?.action == MotionEvent.ACTION_DOWN) {
// 获取手指按下时的X坐标
touchDownX = event.x
return true
} else if (event?.action == MotionEvent.ACTION_UP) {
// 获取手指离开后的X坐标
touchUpX = event.x
// 判断是左滑还是右滑
if (touchUpX - touchDownX > 100) {
// 上一张
if (index == 0) {
index = images.size - 1
} else {
index--
}
} else if (touchDownX - touchUpX > 100) {
// 下一张
if (index >= images.size - 1) {
index = 0
} else {
index++
}
}
// 使用自带的淡入淡出
imageSwitcher.inAnimation = AnimationUtils.loadAnimation(this@MainActivity, android.R.anim.fade_in);
imageSwitcher.outAnimation = AnimationUtils.loadAnimation(this@MainActivity, android.R.anim.fade_out);
// 显示另一张图片
imageSwitcher.setImageResource(images[index])
return true
}
return false
}
})
}
}
网络图片(采用Glide网络加载)
setFactory方法对应替换:
imageSwitcher.setFactory {
val imageView = ImageView(this@MainActivity)
Glide.with(this).load(urlImages[index]).into(imageView)
imageView
}
setOnTouchListener对应替换:
Glide.with(this@SwipeRecommend).asBitmap().load(urlImages[index]).into(imageSwitcher.currentView as ImageView)
注意加载http网络图片需要设置网络权限:
AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.INTERNET" />
AndroidManifest.xml的application标签添加:
android:networkSecurityConfig="@xml/network_security_config"
network_security_config.xml(res/xml/文件夹下,没有自行创建即可)内容为:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
效果展示
来源:https://blog.csdn.net/weixin_40145819/article/details/112535995
标签:Android,滑动,切换图片
0
投稿
猜你喜欢
教你怎么用Java获取国家法定节假日
2021-05-24 01:16:04
浅谈java中对集合对象list的几种循环访问
2022-02-11 02:32:33
Android可筛选的弹窗控件CustomFiltControl
2023-01-21 09:01:46
Java枚举详解及使用实例(涵盖了所有典型用法)
2023-06-29 23:17:55
c#在控制台输出彩色文字的方法
2021-07-17 03:46:51
详解SpringBoot修改启动端口server.port的四种方式
2022-03-10 20:28:48
如何自定义hibernate validation注解示例代码
2021-08-31 12:05:51
MyBatis-Plus实现分页的方法使用详解
2023-02-14 18:22:16
C#的静态工厂方法与构造函数相比有哪些优缺点
2022-08-29 21:11:45
springBoot系列常用注解(小结)
2023-12-17 23:26:45
Java 函数式编程梳理
2023-01-17 04:16:34
基于Java Springboot + Vue + MyBatis实现音乐播放系统
2023-07-09 16:01:41
C#中事件的动态调用实现方法
2022-08-29 03:27:28
基于SpringBoot+Redis实现分布式锁
2023-10-16 11:44:31
Android搭建grpc环境过程分步详解
2023-02-16 01:41:31
springcloud之自定义简易消费服务组件
2022-01-29 00:18:24
Android UI设计系列之自定义TextView属性实现带下划线的文本框(4)
2022-08-11 11:03:29
android短信管理器SmsManager实例详解
2021-09-03 18:17:18
java使用hadoop实现关联商品统计
2022-11-05 05:55:43
java二维码生成的方法
2022-08-02 22:07:28