2016-12-22 13 views
0

How do I get android paint(stylus) size?アンドロイドでスタイラスファースト戦略でタッチイベントを処理するにはどうすればよいですか?

上記の問題については、

私は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

私は自分のスタイラスをそのサイズでしか検出できないので、そのポインタIDを取得するのが唯一の方法です。 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: 
     ...... 
    } 
} 

この方法は完全ではありませんが、まだ動作しますが、

関連する問題