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

来源:互联网 发布:加拿大 留学 专业 知乎 编辑:程序博客网 时间:2024/05/16 16:10

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>

效果图这里写图片描述

0 0
原创粉丝点击