天天看點

重寫onTouchEvent方法響應觸摸屏事件

該例子我們完成一個跟随手指動的小球

首先建一個DrawView.java的View,裡邊重寫了OnDraw和onTouchEvent方法

package com.example.drawview;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

public class DrawView extends View {

public float currentX=40;

public float currentY=50;

public DrawView(Context context, AttributeSet attrs) {

super(context, attrs);

}

//如果想擴充我們的View就重寫我們的onDraw方法

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//建立畫筆

Paint p=new Paint();

//設定畫筆顔色

p.setColor(Color.RED);

//繪制一個小球

canvas.drawCircle(currentX, currentX, 15, p);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

this.currentX=event.getX();

this.currentY=event.getY();

//通知元件重繪

this.invalidate();

//用true表示處理方法已經處理該事件

return true;

}

}

接下來在我們的activity_main.xml當中定義該元件

<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"

    tools:context=".DrawView" 

    android:orientation="vertical">

    <!-- 使用自定義元件 -->

    <com.example.drawview.DrawView

        android:orientation="vertical" 

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"/>

</LinearLayout>

Activity.java

Activity類中不需要為該View綁定事件監聽器,因為該View自己就可以處理觸摸事件

package com.example.drawview;

import android.app.Activity;

import android.os.Bundle;

public class DrawViewTest extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}