转自:http://blog.csdn.net/Dylan465/article/details/8351007
先看图,效果就是这样了,点中图片会变蓝色
项目下载地址:
http://download.csdn.net/download/dylan465/4911020
如果一个图片只是简单的移动,这个很容易就可以判断出触控点是否落在绘制bitmap的矩形区域,但这个bitmap能动态旋转、缩放那就不能用老一套的方法了。
图片左上角的点在图片旋转之后A的坐标落在哪里?图片缩放后A又在哪里?坐标的转换涉及到比较复杂的计算公式,好在有Matrix!矩阵是个好东西!哈哈!请看代码
监听onTouch并转换坐标
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- // TODO Auto-generated method stub
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
-
- // 获取触控点
- float tx = event.getX();
- float ty = event.getY();
- // 存放新坐标的数组
- float[] dst = new float[2];
- // 触控点坐标的数组
- float[] src = { tx, ty };
- Matrix matrix = new Matrix();
- // 获取绘制图片的Matrix,并转换mantrix
- // set inverse to be the inverse of this matrix.
- if (object.getMatrix().invert(matrix)) {
- // 触控坐标根据matrix转换成新的坐标,并存放于dst
- matrix.mapPoints(dst, src);
- }
- // 判断是否击中
- if (object.isHitObject(dst[0], dst[1])) {
- object.setBitmap(hitBitmap);
- } else {
- object.setBitmap(missBitmap);
- }
- } else if (event.getAction() == MotionEvent.ACTION_UP) {
- object.setBitmap(missBitmap);
- }
- return true;
- }
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// 获取触控点
float tx = event.getX();
float ty = event.getY();
// 存放新坐标的数组
float[] dst = new float[2];
// 触控点坐标的数组
float[] src = { tx, ty };
Matrix matrix = new Matrix();
// 获取绘制图片的Matrix,并转换mantrix
// set inverse to be the inverse of this matrix.
if (object.getMatrix().invert(matrix)) {
// 触控坐标根据matrix转换成新的坐标,并存放于dst
matrix.mapPoints(dst, src);
}
// 判断是否击中
if (object.isHitObject(dst[0], dst[1])) {
object.setBitmap(hitBitmap);
} else {
object.setBitmap(missBitmap);
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
object.setBitmap(missBitmap);
}
return true;
}
判断是否击中bitmap
- /**
- * 判断是否击中bitmap
- */
- public boolean isHitObject(float hitX, float hitY) {
- if (hitX >= 0 && hitX <= getBitmap().getWidth() && hitY >= 0
- && hitY <= getBitmap().getHeight()) {
- return true;
- }
- return false;
- }