android上,实现直接在屏幕上显示点击位置,方便调试。
16lz
2021-12-04
android上,实现直接在屏幕上显示点击位置,方便调试,可支持多点,效果图如下:
TestPointActivity.java
package com.ckl.TestPoint;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.view.View;public class TestPointActivity extends Activity {private PointView mPointView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPointView = new PointView(this); mPointView.setImageResource(R.drawable.mj); mPointView.setOnTouchListener(new MyListener()); setContentView(mPointView); } public class MyListener implements View.OnTouchListener { public boolean onTouch(View v, MotionEvent event) { testPoint(event); return true; } private void testPoint(MotionEvent event) { if (!debugOn) { return; } ArrayList mXs = null; ArrayList mYs = null; if (mXs == null && mYs == null) { mXs = new ArrayList(); mYs = new ArrayList(); } mXs.clear(); mYs.clear(); final int N = event.getPointerCount(); float x, y; for (int i = 0; i < N; i++) { x = event.getX(event.getPointerId(i)); y = event.getY(event.getPointerId(i)); logd("x[" +i+ "],y[" +i+ "] = " + x + "," + y); mXs.add(x); mYs.add(y); } if (N > 0) mPointView.setPoints(mXs, mYs); } //调试 private final boolean debugOn = true; private final String TAG = "MyListener"; private int logd(String msg) { int retVal = 0; if (debugOn) { retVal = Log.i(TAG, msg); } return retVal; } }}
PointView.java
package com.ckl.TestPoint;import java.util.ArrayList;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.Log;import android.widget.ImageView;public class PointView extends ImageView {public PointView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);drawTouchPiont(canvas);}//绘制触摸点 ArrayList mXs = null, mYs = null; private boolean mDrawn = true; private Paint mPointPaint = null; private Paint mRectPaint = null; private Paint mTextPaint = null; public void setPoints(ArrayList mXs, ArrayList mYs) { if (debugOn) { if (mPointPaint == null) { mPointPaint = new Paint(); mPointPaint.setAntiAlias(false); mPointPaint.setARGB(255, 0, 96, 255); mRectPaint = new Paint(); mRectPaint.setARGB(0x88, 0x44, 0x44, 0x44); mTextPaint = new Paint(); mTextPaint.setTextSize(15); mTextPaint.setARGB(0xff, 0xff, 0xff, 0xff); logd("init Paint"); } this.mXs = mXs; this.mYs = mYs; mDrawn = false; invalidate();} } private void drawTouchPiont(Canvas canvas) { if (debugOn) { if (!mDrawn) { float x,y, rx, ry; float dx = 80, dy = 80; for (int i = 0; i < mXs.size(); i++) { x = mXs.get(i); y = mYs.get(i); canvas.drawLine(x, y - dy, x, y + dy, mPointPaint); canvas.drawLine(x - dx, y, x + dx, y, mPointPaint); rx = x; ry = y - 40; if (x + 75 > getRight()) rx = x - 76; if (ry < getTop()) ry = y + 20; canvas.drawRect(rx, ry, rx + 75, ry + 20, mRectPaint); canvas.drawText("" + (int)x + "," + (int)y, rx, ry + 15, mTextPaint);} mDrawn = true;} } } //调试private final boolean debugOn = true;private final String TAG = "PointView"; private int logd(String msg) { int retVal = 0; if (debugOn) { retVal = Log.i(TAG, msg);} return retVal; }}
工程代码: TestPoint.7z
更多相关文章
- Android(安卓)--- 图片的特效处理
- android studio 2.2 ndk jni 开发 调试 hello world
- android wpa_supplicant 调试
- Android(安卓)--- 图片的特效处理
- android View 绘制完成监听
- Android调试技术
- 用android:clipChildren来实现红心变大特效
- Android中View图形绘制基础
- Delphi在Android下通过WiFI进行调试