首页 > 系统 > Android > 正文

Android实现图片拖动效果

2019-12-12 03:27:22
字体:
来源:转载
供稿:网友

要求:

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处理 }}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持武林网!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表