您的位置:首页 > 移动开发 > Android开发

android 实现图标 (图片)拖拽移动

2017-04-25 17:37 411 查看
Android实现让图片在屏幕上任意移动

仅供参考,具体如下:

package com.example.mytt;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class TestMoveImageActivity extends Activity {

private int screenWidth;
private int screenHeight;
private ImageView moveIv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text_image_move);

DisplayMetrics dm = getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels - 50;

moveIv = (ImageView) findViewById(R.id.move_iv);
moveIv.setOnTouchListener(movingEventListener);
moveIv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 点击事件
}
});
}

private OnTouchListener movingEventListener = new OnTouchListener() {
int lastX, lastY, x, y;

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
x = (int) event.getRawX();
y = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;

int left = v.getLeft() + dx;
int top = v.getTop() + dy;
int right = v.getRight() + dx;
int bottom = v.getBottom() + dy;
// 设置不能出界
if (left < 0) {
left = 0;
right = left + v.getWidth();
}

if (right > screenWidth) {
right = screenWidth;
left = right - v.getWidth();
}

if (top < 0) {
top = 0;
bottom = top + v.getHeight();
}

if (bottom > screenHeight) {
bottom = screenHeight;
top = bottom - v.getHeight();
}

v.layout(left, top, right, bottom);

lastX = (int) event.getRawX();
lastY = (int) event.getRawY();

break;
case MotionEvent.ACTION_UP:
//检测移动的距离,如果很微小可以认为是点击事件
if (Math.abs(event.getRawX() - x) < 10 && Math.abs(event.getRawY() - y) < 10) {
try {
Field field = View.class.getDeclaredField("mListenerInfo");
field.setAccessible(true);
Object object = field.get(v);
field = object.getClass().getDeclaredField("mOnClickListener");
field.setAccessible(true);
object = field.get(object);
if (object != null && object instanceof View.OnClickListener) {
((View.OnClickListener) object).onClick(v);
}
} catch (Exception e) {
}
}
break;
}
return true;
}
};
}


布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#eeeeee"
android:orientation="vertical" >

<ImageView
android:id="@+id/move_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/bg_liveshow_box" />

</RelativeLayout>


效果图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: