2016-12-05 7 views
0

私は単純な描画アプリケーションを開発していますが、キャンバスに触れるときに目に見えるポインタを追加することが可能かどうか疑問に思っていましたか?私が意味することは、PC上のマウスインジケータに似たものです。その理由は - 消しゴムを使用すると、正確にあなたのタッチが登録されている場所とポインタで表示されていないので、(特にペンが非常に正確であるため、指のタッチを使用すると)役立ちます。私は他の似たような話題で試しましたが、彼らの誰もその質問に答えませんでした。アプリにタッチポインタを追加するには?

+0

答えははいです。 – GurV

+0

タイトル質問の答えはどうですか? – DiTi

+0

あなたは「私は試しました」と言った。私たちに教えてください。 – GurV

答えて

0

このPOSから撮影:ショーのタッチを無効にするには

Settings.System.putInt(context.getContentResolver(), 
      "show_touches", 1); 

•: How to programmatically enable "show touches" option in Android?

•ショーのタッチを可能に

Settings.System.putInt(context.getContentResolver(), 
      "show_touches", 0); 

はあなたにandroid.permission.WRITE_SETTINGSを追加することを忘れないでくださいマニフェスト。

EDIT:

ここではView.OnTouchListenerを実装し、複数の描画モードを定義DrawView.javaです。しかしそれは指標が欠けている。

DrawViewのsetListener内でonStartDrawingメソッドをオーバーライドする:インジケータを表示するかどうか、およびDrawViewの現在のモード(ペン、消しゴムなど)に応じてスタイルを設定するかどうかを決定できます。インジケータが表示されている場合は移動し、描画が終了すると非表示にします。ここ

  mDrawView.setOnDrawViewListener(new DrawView.OnDrawViewListener() { 
       @Override public void onStartDrawing() { 
        canUndoRedo(); 
        // decide whether or not to show an 
        // indicator and style it depending on 
        // mDrawView's attributes and current drawing mode 

        setIndicator(mDrawView.getDrawingMode(),mDrawView.getDrawWidth()); 
       } 

       @Override 
       public void onMove(MotionEvent motionEvent) { 
        if(isIndicatorVisible){ 
         indicatorView.animate() 
           .x(motionEvent.getX()) 
           .y(motionEvent.getY()) 
           .setDuration(0) 
           .start(); 
        } 

       } 

       @Override public void onEndDrawing() { 
        canUndoRedo(); 
        //hide indicator here 
        if (isIndicatorVisible){ 
         indicatorView.setVisibility(View.GONE); 
         isIndicatorVisible = false; 

        } 

       } 

iはDrawView.javaに追加編集です:

定義された新しいインターフェイスメソッドのボイドonMove(MotionEvent motionEvent)

onToch内に新しいメソッドと呼ばれる
public interface OnDrawViewListener { 
     void onStartDrawing(); 

     void onEndDrawing(); 

     void onClearDrawing(); 

     void onRequestText(); 

     void onMove(MotionEvent motionEvent); // added this method 
    } 

コードをチェック:

ここに設定するインジケータの方法:

private void setIndicator(DrawingMode drawingMode, int drawWidth) { 
     if (drawingMode == DrawingMode.ERASER){ 
      RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(drawWidth, drawWidth); 
      indicatorView.setLayoutParams(params); 
      GradientDrawable border = new GradientDrawable(); 
      border.setStroke(1, 0xFF000000); //black border with full opacity 
      if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
       indicatorView.setBackgroundDrawable(border); 
      } else { 
       indicatorView.setBackground(border); 
      } 
      indicatorView.setVisibility(View.VISIBLE); 
      isIndicatorVisible = true; 
     } 
    } 
+0

私は以前この投稿を見てきましたが、これは私が必要とするものではありませんが、私のコードで試してみたことは間違いありません。これは回避策としてのみ機能します。なぜなら、私が触れる場所の輪郭が得られるからです。私が頼んだのは、サイズと同じだけ描画/消去するポインタです(描画/消去はすでにカバーされています)。私はそれをキャンバス上に置いておきたいのです。なぜならツールボックスや他の場所では役に立たないからです。 – DiTi

+0

もう1つの問題は、これがAPI <23のみで機能するように見えることです。それ以降のバージョンではプライベート設定の変更が許可されないため、質問は開いたままです。 – DiTi

+0

私は答えを編集..コードはこのgithubプロジェクトに基づいています:https://github.com/ByoxCode/DrawView ..私は変更を私は作ったし、それは正常に動作している..幸運 – msdev16

関連する問題