1.触摸动作
按下(MotionEvent.ACTION_DOWN)
移动(MotionEvent.ACTION_MOVE)
放开(MotionEvent.ACTION_UP)
2.触摸监听器
onTouchListener
3.触摸方法
在onTouch() 方法里,我们可以根据不同动作编写不同事件处理代码。
4.触点个数与坐标
通过MotionEvent对象的getX()和getY()方法可以获得触摸点的坐标。如果是多点触摸,通过getPointerCount()获取触点个数,然后通过getX(pointerIndex)与getY(pointerIndex)获得某个触点的坐标。
单点触摸移动与多点触摸移动缩放:
声明变量–>实例化控件–>设置根布局–>获取图像控件的布局参数–>触摸监听函数
案例1.单点触摸移动:
放置一个图片后,进行对主界面类的配置
下面展示一些 内联代码片
。
package net.zxj.movemickey;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
protected static final String TAG = "move_mickey_by_touch";
private ImageView ivMickey;
private LinearLayout root;
private LinearLayout.LayoutParams LayoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_main);
// 通过控件资源索引获得控件实例
ivMickey = (ImageView) findViewById(R.id.ivMickey);
root = (LinearLayout) findViewById(R.id.root);
// 设置根布局可以获得焦点
root.setFocusable(true);
// 让根布局获得焦点
root.requestFocus();
// 获取图像控件的布局参数
LayoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();
// 给根布局注册触摸监听器,实现触摸监听器接口,编写触摸事件代码
root.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 根据触摸动作执行不同的操作
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // 触点按下
Log.d(TAG, "ACTION_DOWN(" + event.getX() + ", " + event.getY() + ")");
break;
case MotionEvent.ACTION_MOVE: // 触点移动
Log.d(TAG, "ACTION_MOVE(" + event.getX() + ", " + event.getY() + ")");
break;
case MotionEvent.ACTION_UP: // 触点放开
Log.d(TAG, "ACTION_UP(" + event.getX() + ", " + event.getY() + ")");
}
// 根据变化的触点坐标来更新图像控件的布局参数
LayoutParams.leftMargin = (int) event.getX();
LayoutParams.topMargin = (int) event.getY();
// 重新设置图像控件的布局参数
ivMickey.setLayoutParams(LayoutParams);
return true; // 设置为真,三个事件:down-->move-->up才会依次执行
}
});
}
}
案例2.多点触摸缩放移动:
声明变量
实例化控件
设置根布局
获取图像控件的布局参数
给根布局注册触摸监听器
5、运行程序,查看结果