前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-Android应用开发入门教程(运动事件的处理)

速读原著-Android应用开发入门教程(运动事件的处理)

作者头像
cwl_java
发布2020-01-15 10:37:07
2930
发布2020-01-15 10:37:07
举报
文章被收录于专栏:cwl_Javacwl_Java

6.3 运动事件的处理

触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事件(MotionEvent)用于接收它们的信息。

触摸屏和滚动球事件主要通过实现以下 2 个函数来接收:

代码语言:javascript
复制
public boolean onTouchEvent(MotionEvent event) 
public boolean onTrackballEvent(MotionEvent event)

在以上 2 个函数中,MotionEvent 类作为参数传入,在这个参数中可以获得运动事件的各种信息。

本例介绍另外触摸屏事件的程序,这个程序在 UI 的界面中,显示当前的 MotionEvent 的动作和位置。

在这里插入图片描述
在这里插入图片描述

本例的程序的代码如下所示:

代码语言:javascript
复制
public class TestMotionEvent extends Activity {
    private static final String TAG = "TestMotionEvent";
    TextView mAction;
    TextView mPostion;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testmotionevent);
        mAction = (TextView)findViewById(R.id.action);
        mPostion = (TextView)findViewById(R.id.postion);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int Action = event.getAction();
        float X = event.getX();
        float Y = event.getY();
        Log.v(TAG, "Action = "+ Action );
        Log.v(TAG, "("+X+","+Y+")");
        mAction.setText("Action = "+ Action);
        mPostion.setText("Postion = ("+X+","+Y+")");
        return true;
    }
}

布局文件 testmotionevent.xml 的内容如下所示:

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
	 android:layout_width="fill_parent"android:layout_height="fill_parent" 
	 android:orientation="vertical"> 
	 <TextView android:id="@+id/action" 
	 android:textSize = "20sp" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content"/> 
	 <TextView android:id="@+id/postion" 
	 android:textSize = "20sp" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content"/> 
</LinearLayout>

另外一个示例程序,当触摸屏按下、移动、抬起的时候,在坐标处绘制不同颜色的点,在标题栏中显示当时的动作和坐标。程序的结果如图所示:

在这里插入图片描述
在这里插入图片描述

这里使用的程序如下所示:

代码语言:javascript
复制
public class TestMotionEvent2 extends Activity {
    private static final String TAG = "TestMotionEvent2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new TestMotionView(this));
    }
    public class TestMotionView extends View {
        private Paint mPaint = new Paint();
        private int mAction;
        private float mX;
        private float mY;
        public TestMotionView(Context c) {
            super(c);
            mAction = MotionEvent.ACTION_UP;
            mX = 0;
            mY = 0;
        }
        @Override
        protected void onDraw(Canvas canvas) {
            Paint paint = mPaint;
            canvas.drawColor(Color.WHITE);
            if(MotionEvent.ACTION_MOVE == mAction) { // 移动动作
                paint.setColor(Color.RED);
            }else if(MotionEvent.ACTION_UP == mAction) { // 抬起动作
                paint.setColor(Color.GREEN);
            }else if(MotionEvent.ACTION_DOWN == mAction) { // 按下动作
                paint.setColor(Color.BLUE);
            }
            canvas.drawCircle(mX, mY,10, paint);
            setTitle("A = " + mAction + " ["+ mX +","+ mY +"]");
        }
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            mAction = event.getAction(); // 获得动作
            mX = event.getX(); // 获得坐标
            mY = event.getY();
            Log.v(TAG, "Action = "+ mAction );
            Log.v(TAG, "("+mX+","+mY+")");
            invalidate(); // 重新绘制
            return true;
        }
    }
}

在程序中,在触摸屏事件到来之后,接收到它,并且纪录发生事件的坐标和动作,然后调用 invalidate()重新进行绘制。绘制在 onDraw()中完成,根据不同的事件,绘制不同颜色的点,并设置标题栏。

MotionEvent 是用于处理运动事件的类,这个类中可以获得动作的类型、动作的坐标,在 Android 2.0 版本之后,MotionEvent 中还包含了多点触摸的信息,当有多个触点同时起作用的时候,可以获得触点的数目和每一个触点的坐标。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6.3 运动事件的处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档