android上,实现直接在屏幕上显示点击位置,方便调试。
来源:互联网 发布:索尼电视质量知乎 编辑:程序博客网 时间:2024/05/19 09:01
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<Float> mXs = null; ArrayList<Float> mYs = null; if (mXs == null && mYs == null) { mXs = new ArrayList<Float>(); mYs = new ArrayList<Float>(); } 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<Float> mXs = null, mYs = null; private boolean mDrawn = true; private Paint mPointPaint = null; private Paint mRectPaint = null; private Paint mTextPaint = null; public void setPoints(ArrayList<Float> mXs, ArrayList<Float> 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上,实现直接在屏幕上显示点击位置,方便调试。
- 在屏幕上任意位置显示字符串 基于8086汇编
- Android 数据显示在屏幕上
- 在屏幕上显示时间
- 获取屏幕位置、高度和在屏幕上的位置
- Android对话框的高级设置《二》设置对话框按钮的透明度和对话框的在屏幕上的显示位置
- 关于trace直接打印在屏幕上
- 在屏幕上直接绘图的解答
- Android:在PC屏幕上显示Android手机屏幕
- 得到光标在屏幕上的位置
- 利用汇编语言编程实现在屏幕上显示问候信息
- 编程实现:在屏幕上中央显示出红底黄字。
- 在Android上用surface直接显示yuv数据
- Android在ImageView上直接显示网络图片
- android 之popupWindow 在指定位置上的显示
- android 之popupWindow 在指定位置上的显示
- android 之popupWindow 在指定位置上的显示
- android 之popupWindow 在指定位置上的显示 .
- 互联网的创业机会不多了吗?
- HC-SR04 超声波测距模块 51串口读取代码
- 运营是一门艺术
- 互联网公司创业的7道槛
- 创业团队的那些事
- android上,实现直接在屏幕上显示点击位置,方便调试。
- 互联网创业与软件开发
- Android中Activity、Service和线程之间的通信
- 用CSocket基于UDP协议进行网络通信过程中OnReceive函数无法响应消息的一个原因
- 软件开发七宗罪
- 递增ID的SQL语句
- 如何组建优秀的创业团队
- 不同IE下的CSS样式表示方法
- 巧用HyperLink绑定显示图片并设置图片大小