2016-12-22 3 views
0

How do I get android paint(stylus) size?Как обработать событие touch с помощью стратегии стилуса в Android?

Относительно вышеуказанного вопроса.

я могу создать стилус только стратегию по MotionEvent.getSize()

public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction()==MotionEvent.ACTION_MOVE) { 
      float paintsize = event.getSize(); 
      Log.i(TAG,String.valueOf(paintsize)); 
      if (paintsize == 0.02) { 
       canvas.drawLine(mov_x, mov_y, event.getX(), event.getY(), paint); 
       invalidate(); 
      } 
     } 
     ...... 
     return true; 
} 

Но это потому что моя рука не может ничего сделать.

Итак, я хочу разработать стратегию стилуса, например, когда моя рука и стилус касаются экрана одновременно, система должна показывать только путь стилуса; когда только моя рука касается экрана, система показывает путь моей руки, как обычно.

На моем взгляде, стилус не может передать любое сообщение на устройство, так что я только одно значения для обнаружения: Размер

размера Моих рук составляет от 0,06 до 0.8999 ... и размера стилуса составляет 0,02

Как справиться с приоритетом сенсорного события? Я понятия не имею об этой ситуации.

ответ

0

Поскольку я могу только определить свой стилус по его размеру, получить его PointerID - единственный способ сделать это.

Согласно https://developer.android.com/reference/android/view/MotionEvent.html#getPointerId%28int%29

getPointerID: Возвращает идентификатор указателя, связанный с определенным индексом данных указателя в этом случае. Идентификатор сообщает вам фактический номер указателя, связанный с данными, с учетом отдельных указателей, идущих вверх и вниз с момента начала текущего жеста.

Вот пример.

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    float inputsize = event.getSize(); 
    int index = event.getActionIndex(); 
    int inputid = event.getPointerID(index); 
    boolean isStylus = false; 
    int stylusid = -1; 

    switch(event.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
     if(inputsize==0.02 && isStylus==false){ 
     isStylus = true; 
     stylusid = inputid; 
     } 
     if((isStylus==true) && (inputid==stylusid)){ 
     mov_x = event.getX(); 
     mov_y = event.getY(); 
     //If the new input event is stylus, then move to new coordinate. 
     mPath.moveTo(mov_x,mov_y); 
     } 
     ...... 
     break; 
    case MotionEvent.ACTION_MOVE: 
     ...... 
    } 
} 

Хотя этот способ не является совершенным, но все же может работать.

Смежные вопросы