安卓触摸事件图像随着鼠标拖动而运动

目录

触摸常用属性:

触摸监听器

触摸方法

触点个数与坐标

案例演示

最后运行效果:


触摸常用属性:

属性 含义
MotionEvent.ACTION_DOWN 按下
MotionEvent.ACTION_MOVE 移动
MotionEvent.ACTION_UP 放开

触摸监听器

触摸监听器 - onTouchListener - 接口

触摸方法

onTouch()抽象 方法里,我们可以根据不同动作编写不同事件处理代码。

触点个数与坐标

通过MotionEvent对象的getX()getY()方法可以获得触摸点的坐标。如果是多点触摸,通过getPointerCount()获取触点个数,然后通过getX(pointerIndex)getY(pointerIndex)获得某个触点的坐标。

案例演示

基于Empty Activity新建MoveMickeyByTouch

将背景图片和图像拷贝进去

 打开字符串资源文件改变应用标题(可以省略)

打开 主布局资源文件 - activity_main.xml改为线性布局并增加图像控件

 具体代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root"
    android:background="@drawable/img01"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <ImageView
        android:id="@+id/iv_mickey"
        android:layout_width="100dp"
        android:layout_height="120dp"
        android:scaleType="fitXY"
        android:src="@drawable/img02"/>
<!--    scaleType=“fitXY” 将原图进行横方向(即XY方向)的拉伸后绘制的。-->
</LinearLayout>

打开主界面类 - MainActivity输入

具体代码:

package net.zyt.move_mickey_by_touch;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
    private ImageView ivMickey;//米老鼠图形控件
    private LinearLayout root;//米老鼠图形控件

    private final String TAG="move_mickey_by_touch";//标记常量

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过资源标识符获取控件实例
        root=findViewById(R.id.root);
        ivMickey=findViewById(R.id.iv_mickey);
        //让根布局获取焦点
        root.setFocusable(true);
        root.requestFocus();
      

        //给线性根部局注册触摸监听器,实现触摸监听器接口,编写触摸事件代码
        root.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //根据不同触摸动作执行不同操作
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN://0触点按下
                        //输出触点坐标
                        Log.d(TAG,"ACTION_DOWN("+event.getX()+","+event.getY()+")");
                        break;
                    case MotionEvent.ACTION_MOVE://2,触点移动
                        //输出触点坐标
                        Log.d(TAG,"ACTION_MOVE("+event.getX()+","+event.getY()+")");
                        break;
                    case MotionEvent.ACTION_UP://1,触点放开
                        //输出触点坐标
                        Log.d(TAG,"ACTION_UP("+event.getX()+","+event.getY()+")");
                        break;
                }
                //设置米老鼠图像控件坐标
                ivMickey.setX(event.getX()-ivMickey.getWidth()/2);
                ivMickey.setY(event.getY()-ivMickey.getHeight()/2);
            

                return true;//设置为ture,三个事件:down-->move-->up才会依次执行
        }
    });
    }
}

最后运行效果:

猜你喜欢

转载自blog.csdn.net/hollow_future/article/details/127613487