1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.cts.verifier.projection.touch; 18 19 import android.content.Context; 20 import android.graphics.Canvas; 21 import android.graphics.Color; 22 import android.graphics.Paint; 23 import android.graphics.Point; 24 import android.util.AttributeSet; 25 import android.view.MotionEvent; 26 import android.view.View; 27 28 import java.util.ArrayList; 29 import java.util.List; 30 /* 31 * Simple view that draws a circle where a touch is registered 32 */ 33 public class TouchPointView extends View { 34 @SuppressWarnings("unused") 35 private static final String TAG = TouchPointView.class.getSimpleName(); 36 37 private final int[] mColors = { 38 Color.RED, 39 Color.GREEN, 40 Color.BLUE, 41 Color.YELLOW, 42 Color.MAGENTA, 43 Color.BLACK, 44 Color.DKGRAY 45 }; 46 List<Finger> mFingers; 47 Paint mPaint; 48 TouchPointView(Context context, AttributeSet attrs)49 public TouchPointView(Context context, AttributeSet attrs) { 50 this(context, attrs, 0); 51 } 52 TouchPointView(Context context, AttributeSet attrs, int defStyle)53 public TouchPointView(Context context, AttributeSet attrs, int defStyle) { 54 super(context, attrs, defStyle); 55 mFingers = new ArrayList<Finger>(); 56 57 mPaint = new Paint(); 58 mPaint.setStyle(Paint.Style.FILL); 59 } 60 61 @Override onTouchEvent(MotionEvent event)62 public boolean onTouchEvent(MotionEvent event) { 63 mFingers.clear(); 64 if (event.getActionMasked() == MotionEvent.ACTION_UP) { 65 invalidate(); 66 return true; 67 } 68 for (int i = 0; i < event.getPointerCount(); i++) { 69 int pointerId = event.getPointerId(i); 70 int pointerIndex = event.findPointerIndex(pointerId); 71 Finger finger = new Finger(); 72 finger.point = new Point((int)event.getX(pointerIndex), (int)event.getY(pointerIndex)); 73 finger.pointerId = pointerId; 74 75 mFingers.add(finger); 76 } 77 invalidate(); 78 return true; 79 } 80 81 @Override onDraw(Canvas canvas)82 public void onDraw(Canvas canvas) { 83 int radius = canvas.getWidth() / 20; 84 for (int i = 0; i < mFingers.size(); i++) { 85 Finger finger = mFingers.get(i); 86 Point point = finger.point; 87 int color = mColors[finger.pointerId % mColors.length]; 88 mPaint.setColor(color); 89 canvas.drawCircle(point.x, point.y, radius, mPaint); 90 } 91 } 92 93 private class Finger { 94 public Point point; 95 public int pointerId; 96 } 97 } 98 99