Android实现图片拖动效果
作者:ganchuanpu 时间:2022-12-05 09:46:27
要求:
1.通过手指移动来拖动图片
2.控制图片不能超出屏幕显示区域
技术点:
1.MotionEvent处理
2.对View进行动态定位(layout)
activity_main.xml:
<RelativeLayout 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" >
<ImageView
android:id="@+id/iv_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test"/>
</RelativeLayout>
MainActivity:
public class MainActivity extends Activity implements OnTouchListener {
private ImageView iv_main;
private RelativeLayout parentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_main = (ImageView) findViewById(R.id.iv_main);
parentView = (RelativeLayout) iv_main.getParent();
/*
int right = parentView.getRight(); //0
int bottom = parentView.getBottom(); //0
Toast.makeText(this, right+"---"+bottom, 1).show();
*/
//设置touch监听
iv_main.setOnTouchListener(this);
}
private int lastX;
private int lastY;
private int maxRight;
private int maxBottom;
@Override
public boolean onTouch(View v, MotionEvent event) {
//得到事件的坐标
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//得到父视图的right/bottom
if(maxRight==0) {//保证只赋一次值
maxRight = parentView.getRight();
maxBottom = parentView.getBottom();
}
//第一次记录lastX/lastY
lastX =eventX;
lastY = eventY;
break;
case MotionEvent.ACTION_MOVE:
//计算事件的偏移
int dx = eventX-lastX;
int dy = eventY-lastY;
//根据事件的偏移来移动imageView
int left = iv_main.getLeft()+dx;
int top = iv_main.getTop()+dy;
int right = iv_main.getRight()+dx;
int bottom = iv_main.getBottom()+dy;
//限制left >=0
if(left<0) {
right += -left;
left = 0;
}
//限制top
if(top<0) {
bottom += -top;
top = 0;
}
//限制right <=maxRight
if(right>maxRight) {
left -= right-maxRight;
right = maxRight;
}
//限制bottom <=maxBottom
if(bottom>maxBottom) {
top -= bottom-maxBottom;
bottom = maxBottom;
}
iv_main.layout(left, top, right, bottom);
//再次记录lastX/lastY
lastX = eventX;
lastY = eventY;
break;
default:
break;
}
return true;//所有的motionEvent都交给imageView处理
}
}
来源:http://www.cnblogs.com/ganchuanpu/p/6512195.html
标签:android,拖动
0
投稿
猜你喜欢
java微信支付接入流程详解
2023-07-28 18:37:46
Android实现与Apache Tomcat服务器数据交互(MySql数据库)
2023-06-02 21:53:39
C#实现简易计算器功能(附源码)
2021-07-18 00:16:00
Java多线程编程中使用Condition类操作锁的方法详解
2023-10-19 13:30:55
一文搞懂String的intern()方法
2022-05-28 12:05:35
C++二分查找算法实例
2021-09-07 20:40:05
C#数据结构之最小堆的实现方法
2023-07-15 01:59:10
SpringCloud让微服务实现指定程序调用
2022-03-05 23:24:15
SpringBoot实战之高效使用枚举参数(原理篇)案例详解
2022-02-10 23:54:23
浅析Android手机卫士之抖动输入框和手机震动
2022-11-23 08:01:50
关于Java中的try-with-resources语句
2022-10-21 16:49:54
C#过滤DataTable中空数据和重复数据的示例代码
2022-03-15 19:33:45
C#线程定义和使用方法详解
2022-08-18 00:51:51
SpringBoot执行定时任务@Scheduled的方法
2022-08-13 03:43:31
简单了解Spring Framework5.0新特性
2021-08-06 02:21:46
C#使用NPOI将excel导入到list的方法
2023-11-17 22:49:09
c# BackgroundWorker组件的作用
2022-12-23 20:56:12
Spring容器-BeanFactory和ApplicationContext使用详解
2022-03-20 07:02:45
springboot vue组件开发实现接口断言功能
2023-11-12 10:26:53
springboot如何通过@PropertySource加载自定义yml文件
2022-08-06 19:42:56