Android上实现直接在屏幕上显示点击位置


Android上实现直接在屏幕上显示点击位置,方便调试,可支持多点,效果图如下:



TestPointActivity.java

  1. package com.ckl.TestPoint;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8. import android.view.MotionEvent;  
  9. import android.view.View;  
  10.   
  11. public class TestPointActivity extends Activity {  
  12.   
  13.     private PointView mPointView;  
  14.   
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         mPointView = new PointView(this);  
  19.         mPointView.setImageResource(R.drawable.mj);  
  20.         mPointView.setOnTouchListener(new MyListener());  
  21.         setContentView(mPointView);  
  22.     }  
  23.       
  24.     public class MyListener implements View.OnTouchListener {  
  25.   
  26.         public boolean onTouch(View v, MotionEvent event) {  
  27.             testPoint(event);  
  28.             return true;  
  29.         }  
  30.           
  31.         private void testPoint(MotionEvent event) {  
  32.             if (!debugOn) {  
  33.                 return;  
  34.             }  
  35.             ArrayList<Float> mXs = null;  
  36.             ArrayList<Float> mYs = null;  
  37.             if (mXs == null && mYs == null) {  
  38.                 mXs = new ArrayList<Float>();  
  39.                 mYs = new ArrayList<Float>();  
  40.             }  
  41.             mXs.clear();  
  42.             mYs.clear();  
  43.               
  44.             final int N = event.getPointerCount();  
  45.             float x, y;  
  46.             for (int i = 0; i < N; i++) {  
  47.                 x = event.getX(event.getPointerId(i));  
  48.                 y = event.getY(event.getPointerId(i));  
  49.                 logd("x[" +i+ "],y[" +i+ "] = " + x + "," + y);  
  50.                 mXs.add(x);  
  51.                 mYs.add(y);  
  52.             }  
  53.             if (N > 0) mPointView.setPoints(mXs, mYs);  
  54.         }  
  55.           
  56.         //调试   
  57.         private final boolean debugOn = true;  
  58.         private final String TAG = "MyListener";  
  59.         private int logd(String msg) {  
  60.             int retVal = 0;  
  61.             if (debugOn) {  
  62.                 retVal = Log.i(TAG, msg);  
  63.             }  
  64.             return retVal;  
  65.         }  
  66.     }  
  67. }  

PointView.java

  1. package com.ckl.TestPoint;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.content.Context;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Paint;  
  8. import android.util.Log;  
  9. import android.widget.ImageView;  
  10.   
  11. public class PointView extends ImageView {  
  12.   
  13.     public PointView(Context context) {  
  14.         super(context);  
  15.     }  
  16.   
  17.     @Override  
  18.     protected void onDraw(Canvas canvas) {  
  19.         super.onDraw(canvas);  
  20.         drawTouchPiont(canvas);  
  21.     }  
  22.       
  23.     //绘制触摸点   
  24.     ArrayList<Float> mXs = null, mYs = null;  
  25.     private boolean mDrawn = true;  
  26.     private Paint mPointPaint = null;  
  27.     private Paint mRectPaint = null;  
  28.     private Paint mTextPaint = null;  
  29.     public void setPoints(ArrayList<Float> mXs, ArrayList<Float> mYs) {  
  30.         if (debugOn) {  
  31.             if (mPointPaint == null) {  
  32.                 mPointPaint = new Paint();  
  33.                 mPointPaint.setAntiAlias(false);  
  34.                 mPointPaint.setARGB(255096255);  
  35.                   
  36.                 mRectPaint = new Paint();  
  37.                 mRectPaint.setARGB(0x880x440x440x44);  
  38.                   
  39.                 mTextPaint = new Paint();  
  40.                 mTextPaint.setTextSize(15);  
  41.                 mTextPaint.setARGB(0xff0xff0xff0xff);  
  42.                   
  43.                 logd("init Paint");  
  44.             }  
  45.             this.mXs = mXs;  
  46.             this.mYs = mYs;  
  47.             mDrawn = false;  
  48.             invalidate();  
  49.         }  
  50.     }  
  51.       
  52.     private void drawTouchPiont(Canvas canvas) {  
  53.         if (debugOn) {  
  54.             if (!mDrawn) {  
  55.                 float x,y, rx, ry;  
  56.                 float dx = 80, dy = 80;  
  57.                 for (int i = 0; i < mXs.size(); i++) {  
  58.                     x = mXs.get(i);  
  59.                     y = mYs.get(i);  
  60.                     canvas.drawLine(x, y - dy, x, y + dy, mPointPaint);  
  61.                     canvas.drawLine(x - dx, y, x + dx, y, mPointPaint);  
  62.                       
  63.                     rx = x;  
  64.                     ry = y - 40;  
  65.                     if (x + 75 > getRight())  
  66.                         rx = x - 76;  
  67.                     if (ry < getTop())  
  68.                         ry = y + 20;  
  69.                     canvas.drawRect(rx, ry, rx + 75, ry + 20, mRectPaint);  
  70.                     canvas.drawText("" + (int)x + "," + (int)y, rx, ry + 15, mTextPaint);  
  71.                 }  
  72.                 mDrawn = true;  
  73.             }  
  74.         }  
  75.     }  
  76.       
  77.     //调试   
  78.     private final boolean debugOn = true;  
  79.     private final String TAG = "PointView";  
  80.     private int logd(String msg) {  
  81.         int retVal = 0;  
  82.         if (debugOn) {  
  83.             retVal = Log.i(TAG, msg);  
  84.         }  
  85.         return retVal;  
  86.     }  
  87. }  

Android上实现直接在屏幕上显示点击位置源代码下载地址:

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /pub/Android源码集锦/2011年/10月/Android上实现直接在屏幕上显示点击位置源代码/

相关内容