Android 图片移动和拖动

这篇博客介绍了如何在Android应用中实现图片的移动和拖动功能。通过点击left和right按钮,图片可以在屏幕内左右移动,使用RelativeLayout作为基础布局。同时,详细讲解了如何设置拖动功能,利用MotionEvent监听用户的触摸操作,动态调整图片的位置。

Android 图片移动和拖动

移动图片

实现方式:利用点击两个按钮(left和right)来操纵图片向左向右的移动。

界面

要使得图片可以移动,要使用“RelativeLayout”

activity_main:

将图片文件储存到drawable文件夹中,该示例命名为image1

<Button
    android:id="@+id/btnRight"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="22dp"
    android:layout_toRightOf="@+id/btnLeft"
    android:text="Right"/>
<Button
    android:id="@+id/btnLeft"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Left"/>
<ImageView
    android:id="@+id/image1"
    android:layout_width="135dp"
    android:layout_height="135dp"
    android:layout_alignParentLeft="true"
    android:layout_margin="89dp"
    android:src="@drawable/image1"/>

组件

  • 初始化三个组件

  • 向左移动

需要import Android.widget.RelativeLayout才能使用LayoutParams,每点击一次“left”按钮图片向左移动5个单位直到图像移到屏幕最左边。每次点击刷新图像。

    button1.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View view) {
            RelativeLayout.LayoutParams par
                    = (RelativeLayout.LayoutParams) image1.getLayoutParams();
            if(par.leftMargin - 5 > 0){
                par.leftMargin -= 5;
            }
            image1.setLayoutParams(par);
        }
    });

* 向右移动

①、需要import Android.view.Display 才能使用 Display类。使用getsize()函数获取屏幕长宽数据。
②、Point在本例中可看做拥有两个组件的结构体。
③、图片的右边缘要一直比屏幕的宽小(保证图像不出屏幕范围)
④、利用LayoutParams获取图像在相对布局中的位置数据,再重新刷新数据和图像在屏幕上的位置。

    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            Display display = getWindowManager().getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            int screen_width = size.x;
            int screen_height = size.y;
            RelativeLayout.LayoutParams par =
                    (RelativeLayout.LayoutParams)image1.getLayoutParams();
            if(par.leftMargin + 5 < screen_width - par.width){
               par.leftMargin += 5;
            }
            image1.setLayoutParams(par);
        }
    });

拖动图片

实现该功能必须import Android.view.MotionEvent
声明一个对图像的touchListener,移动图片到某位置可以利用获取当前用户滑动到屏幕上位置来实现(event.getRawX()、event.getRawY())。

 image1.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            RelativeLayout.LayoutParams par = (RelativeLayout.LayoutParams)image1.getLayoutParams();
            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_MOVE:
                    int x_cord = (int)event.getRawX();
                    int y_cord = (int)event.getRawY();
                    par.leftMargin = x_cord - par.width / 2;
                    par.topMargin = y_cord - par.height / 2 ;
                    image1.setLayoutParams(par);
                    break;
                default:
                    break;
            }
            return true;
        }

    });

作者:林冰
链接:Android 图片移动和拖动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值