博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多点触控显示坐标
阅读量:5054 次
发布时间:2019-06-12

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

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MTView(this));    }    public class MTView extends SurfaceView implements SurfaceHolder.Callback {        private static final int MAX_TOUCHPOINTS = 10;        private static final String START_TEXT = "请随便触摸屏幕进行测试";        private Paint textPaint = new Paint();        private Paint touchPaints[] = new Paint[MAX_TOUCHPOINTS];        private int colors[] = new int[MAX_TOUCHPOINTS];        private int width, height;        private float scale = 1.0f;        public MTView(Context context) {            super(context);            SurfaceHolder holder = getHolder();            holder.addCallback(this);            setFocusable(true); // 确保我们的View能获得输入焦点            setFocusableInTouchMode(true); // 确保能接收到触屏事件            init();        }        private void init() {            // 初始化10个不同颜色的画笔            textPaint.setColor(Color.WHITE);            colors[0] = Color.BLUE;            colors[1] = Color.RED;            colors[2] = Color.GREEN;            colors[3] = Color.YELLOW;            colors[4] = Color.CYAN;            colors[5] = Color.MAGENTA;            colors[6] = Color.DKGRAY;            colors[7] = Color.WHITE;            colors[8] = Color.LTGRAY;            colors[9] = Color.GRAY;            for (int i = 0; i < MAX_TOUCHPOINTS; i++) {                touchPaints[i] = new Paint();                touchPaints[i].setColor(colors[i]);            }        }        /**         * 处理触屏事件         */        @Override        public boolean onTouchEvent(MotionEvent event) {            // 获得屏幕触点数量            int pointerCount = event.getPointerCount();            if (pointerCount > MAX_TOUCHPOINTS) {                pointerCount = MAX_TOUCHPOINTS;            }            // 锁定Canvas,开始进行相应的界面处理            Canvas c = getHolder().lockCanvas();            if (c != null) {                c.drawColor(Color.BLACK);                if (event.getAction() == MotionEvent.ACTION_UP) {                    // 当手离开屏幕时,清屏                } else {                    // 在每一个触点上绘制一个十字和坐标信息                    for (int i = 0; i < pointerCount; i++) {                        int id = event.getPointerId(i);                        int x = (int) event.getX(i);                        int y = (int) event.getY(i);                        drawCrosshairsAndText(x, y, touchPaints[id], i, id, c);                    }                    // 在每一个触点上绘制一个圆                    for (int i = 0; i < pointerCount; i++) {                        int id = event.getPointerId(i);                        int x = (int) event.getX(i);                        int y = (int) event.getY(i);                        drawCircle(x, y, touchPaints[id], c);                    }                }                // 画完后,unlock                getHolder().unlockCanvasAndPost(c);            }            return true;        }        /**         * 画十字及坐标信息         *         * @param x         * @param y         * @param paint         * @param ptr         * @param id         * @param c         */        private void drawCrosshairsAndText(int x, int y, Paint paint, int ptr,                                           int id, Canvas c) {            c.drawLine(0, y, width, y, paint);            c.drawLine(x, 0, x, height, paint);            int textY = (int) ((15 + 20 * ptr) * scale);            c.drawText("x" + ptr + "=" + x, 10 * scale, textY, textPaint);            c.drawText("y" + ptr + "=" + y, 70 * scale, textY, textPaint);            c.drawText("id" + ptr + "=" + id, width - 55 * scale, textY, textPaint);        }        /**         * 画圆         *         * @param x         * @param y         * @param paint         * @param c         */        private void drawCircle(int x, int y, Paint paint, Canvas c) {            c.drawCircle(x, y, 40 * scale, paint);        }        /**         * 进入程序时背景画成黑色,然后把START_TEXT写到屏幕         */        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            this.width = width;            this.height = height;            if (width > height) {                this.scale = width / 480f;            } else {                this.scale = height / 480f;            }            textPaint.setTextSize(14 * scale);            Canvas c = getHolder().lockCanvas();            if (c != null) {                c.drawColor(Color.BLACK);                float tWidth = textPaint.measureText(START_TEXT);                c.drawText(START_TEXT, width / 2 - tWidth / 2, height / 2, textPaint);                getHolder().unlockCanvasAndPost(c);            }        }        public void surfaceCreated(SurfaceHolder holder) {        }        public void surfaceDestroyed(SurfaceHolder holder) {        }    }}

 

转载于:https://www.cnblogs.com/leshen/p/7461500.html

你可能感兴趣的文章
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>
关于页面<!DOCTYPE>声明
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
C++标准库vector使用(更新中...)
查看>>
cocos2d-x 2.2.6 之 .xml文件数据读取
查看>>
枚举的使用
查看>>
BZOJ 1531 二进制优化多重背包
查看>>
BZOJ 2324 (有上下界的)费用流
查看>>
python3基础06(随机数的使用)
查看>>
Zookeeper系列(二)特征及应用场景
查看>>
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>