android点击屏幕中间播放,android上,实现直接在屏幕上显示点击位置,方便调试。...
发布日期:2021-06-24 12:34:47 浏览次数:2 分类:技术文章

本文共 3207 字,大约阅读时间需要 10 分钟。

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;

}

ArrayListmXs = null;

ArrayListmYs = 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);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

drawTouchPiont(canvas);

}

//绘制触摸点

ArrayListmXs = null, mYs = null;

private boolean mDrawn = true;

private Paint mPointPaint = null;

private Paint mRectPaint = null;

private Paint mTextPaint = null;

public void setPoints(ArrayListmXs, ArrayListmYs) {

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

转载地址:https://blog.csdn.net/weixin_32767591/article/details/117510925 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:winform编译android,拋物線之winform與android的實現
下一篇:Android输入法方法,Android的输入法系统框架原理

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月23日 07时07分42秒