android上,实现直接在屏幕上显示点击位置,方便调试。
16lz
2021-01-23
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实现图片平铺效果&WebView多点触控实现缩放
- [Android实例] android多点触摸demo
- 让Android自带的Gallery实现多点缩放,拖动和边界回弹效果,效果流畅
- Android 关闭/打开多点触控 (Android中设置不能同时点击2个view的
- Android之系统自带的文字外观设置及实际显示效果图 android:text
- Android中gravity的各种效果图
- 2011.10.17——— android 多点触控
- android tp多点触摸
- Android中使用Gallery_tabhost来实现标签效果图源码