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

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>

效果图这里写图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值