• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.google.android.car.kitchensink.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.util.Log;
26 import android.view.MotionEvent;
27 import android.view.View;
28 
29 import java.util.ArrayList;
30 import java.util.List;
31 
32 public class TouchPointView extends View {
33     @SuppressWarnings("unused")
34     private static final String TAG = TouchPointView.class.getSimpleName();
35 
36     private static final boolean LOG_ONLY = true;
37 
38     private final int[] mColors = {
39             Color.RED,
40             Color.GREEN,
41             Color.BLUE,
42             Color.YELLOW,
43             Color.MAGENTA,
44             Color.BLACK,
45             Color.DKGRAY
46     };
47     List<Finger> mFingers;
48     Paint mPaint;
49 
TouchPointView(Context context, AttributeSet attrs)50     public TouchPointView(Context context, AttributeSet attrs) {
51         this(context, attrs, 0);
52     }
53 
TouchPointView(Context context, AttributeSet attrs, int defStyle)54     public TouchPointView(Context context, AttributeSet attrs, int defStyle) {
55         super(context, attrs, defStyle);
56         mFingers = new ArrayList<Finger>();
57 
58         mPaint = new Paint();
59         mPaint.setStyle(Paint.Style.FILL);
60     }
61 
62     @Override
onTouchEvent(MotionEvent event)63     public boolean onTouchEvent(MotionEvent event) {
64         if (LOG_ONLY) {
65             logTouchEvents(event);
66             return true;
67         }
68         mFingers.clear();
69         if (event.getActionMasked() == MotionEvent.ACTION_UP) {
70             invalidate();
71             return true;
72         }
73         for (int i = 0; i < event.getPointerCount(); i++) {
74             int pointerId = event.getPointerId(i);
75             int pointerIndex = event.findPointerIndex(pointerId);
76             Finger finger = new Finger();
77             finger.point =  new Point((int)event.getX(pointerIndex), (int)event.getY(pointerIndex));
78             finger.pointerId = pointerId;
79 
80             mFingers.add(finger);
81         }
82         invalidate();
83         return true;
84     }
85 
logTouchEvents(MotionEvent event)86     private void logTouchEvents(MotionEvent event) {
87         if (event.getActionMasked() != MotionEvent.ACTION_UP) {
88             return;
89         }
90 
91         for (int i = 0; i < event.getPointerCount(); i++) {
92             int pointerId = event.getPointerId(i);
93             int pointerIndex = event.findPointerIndex(pointerId);
94             long downTime = event.getDownTime();
95             long eventTime = event.getEventTime();
96             Log.d(TAG, "TouchUp [x=" + event.getX(pointerIndex) + ", y=" + event.getY(pointerIndex) +
97                   " , pointerId=" + pointerId + ", pointerIndex=" + pointerIndex + ", duration=" +
98                   (eventTime - downTime) + "]");
99         }
100     }
101 
102     @Override
onDraw(Canvas canvas)103     public void onDraw(Canvas canvas) {
104         if (LOG_ONLY) {
105             return;
106         }
107         int radius = canvas.getWidth() / 20;
108         for (int i = 0; i < mFingers.size(); i++) {
109             Finger finger = mFingers.get(i);
110             Point point = finger.point;
111             int color = mColors[finger.pointerId % mColors.length];
112             mPaint.setColor(color);
113             canvas.drawCircle(point.x, point.y, radius, mPaint);
114         }
115     }
116 
117     private class Finger {
118         public Point point;
119         public int pointerId;
120     }
121 }
122