Android在界面中随意移动一个图片

比较简单,没什么要说到的,直接看实现的代码

.xml
  <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
.java
public class MainActivity extends ActionBarActivity {

    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);

        iv.setOnTouchListener(new OnTouchListener() {
            int maxwidth;
            int maxheight;
            int preX;// 上一次操作的x的坐标
            int preY;// 上一次操作的Y坐标

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // 获取当前坐标
                int rawX = (int) event.getRawX();
                int rawY = (int) event.getRawY();
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (maxwidth == 0) {
                        RelativeLayout ivparent = (RelativeLayout) iv
                                .getParent();
                        maxwidth = ivparent.getWidth();
                        maxheight = ivparent.getHeight();

                    }
                    preX = rawX;
                    preY = rawY;

                    break;
                case MotionEvent.ACTION_MOVE:
                    // 获取当前x,y轴移动的距离
                    int dx = rawX - preX;
                    int dy = rawY - preY;
                    // 获取当前图片的四个值
                    int left = iv.getLeft() + dx;
                    int top = iv.getTop() + dy;
                    int right = iv.getRight() + dx;
                    int bottm = iv.getBottom() + dy;
                    if (left < 0) {
                        right = right - left;
                        left = 0;

                    }
                    //限制right
                    if(right > maxwidth){
                        left = left - (right - maxwidth);
                        right = maxwidth;
                    }
                    if (top < 0) {
                        bottm = bottm - top;
                        top = 0;
                    }
                    if (bottm >maxheight) {
                        top = top - (bottm-maxheight);
                        bottm = maxheight;
                    }
                    iv.layout(left, top, right, bottm);
                    // 从新给初始值赋值
                    preX = rawX;
                    preY = rawY;

                    break;

                }

                return true;
            }
        });
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值