Xử lý chạm màn hình trên Android


  1. Định nghĩa lớp kế thừ từ lớp View
  2. Hiệu chỉnh lại sự kiện Draw
  3. Xử lý chạm bằng cách định nghĩa lại sự kiện Touch của View
  4. Test

Tạo lớp SingleTouch

package com.example.chuong5_touch;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class SingleTouch extends View {

	// doi tuong ve (cay co ve)
	Paint paint;
	Path path;

	public SingleTouch(Context context) {
		super(context);
		setBackgroundColor(Color.WHITE);

		paint = new Paint();
		path = new Path();
		paint.setAntiAlias(true);// khu rang cua
		paint.setStrokeWidth(6f);// do day
		paint.setColor(Color.RED);// gan mau
		paint.setStyle(Paint.Style.STROKE);
		paint.setStrokeJoin(Paint.Join.ROUND);
	}

	public boolean xoa = false;

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		if (xoa) {
			path = new Path();
			xoa = false;
		}

		canvas.drawPath(path, paint);
	}

	// xu ly khi cham len SingleTouch
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// toa do diem cham
		float eventX = event.getX();
		float eventY = event.getY();

		switch (event.getAction()) {
		// bat dau cham
		case MotionEvent.ACTION_DOWN:
			path.moveTo(eventX, eventY);
			break;
		// ket thuc qua trinh ve
		case MotionEvent.ACTION_UP:
			Toast.makeText(getContext(), "Da ve xong", Toast.LENGTH_LONG)
					.show();
			break;

		// vua cham vua re
		case MotionEvent.ACTION_MOVE:
			path.lineTo(eventX, eventY);
			break;
		default:
			return false;
		}

		invalidate();
		return true;
	}
}

Hiệu chỉnh lại sự kiện onCreate của MainActivity như sau:

SingleTouch touch;
LinearLayout ln1;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	touch = new SingleTouch(MainActivity.this);
	
	ln1 =(LinearLayout)findViewById(R.id.LinearLayout1);
	LayoutParams p = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);		
	ln1.addView(touch,1,p);
	
	btn =(Button)findViewById(R.id.button1);
	btn.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			touch.xoa = true;
			touch.invalidate();
		}
	});
}
Advertisements

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s