2012-01-20 6 views
0

私のタブレットのポインタに問題があります。私はアートアプリをデザインしています。私は自分の動きをどのように鏡映するかを考えようとしています(対称性)。現在、指またはスタイラスで画面をタッチすると、画像(プログラムで生成された円)が描かれ、指/スタイラスを動かした場所に自動的に更新されます。これは完全に機能します。しかし今、私は2つの新しい機能を追加したい:水平と垂直の対称性。したがって、水平対称を選択すると、反対側のX位置に同じY軸に沿って別のポインタが表示されます。したがって、300x、250yでタッチすると、元のポインタとともに、別のポインタが-300x、250yに表示されます。今私はそれを適用してテストしようとしたが、私はまだ元のポインタを取得します。Android:あなたのタッチを鏡に映す方法は? (ビジュアルポインターの問題)

rLO.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction() & MotionEvent.ACTION_MASK) { 

     case MotionEvent.ACTION_DOWN:    

      // Hardware accelerated at runtime 
      getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, 
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 
      cursor.x = (int)event.getX() - (cursor.radius/2); 
      cursor.y = (int)event.getY() - (cursor.radius/2); 
      cursor.onDraw(cursor.e); 
      rLO.addView(cursor); 

      if (hSym > 0) { 
       vSym = 0; 
       cursorH.x = -cursor.x; 
       cursorH.y = cursor.y; 
       cursorH.onDraw(cursorH.e); 
       rLO.addView(cursorH); 
      } 

      if (vSym > 0) { 
       hSym = 0; 
       cursorV.x = cursor.x; 
       cursorV.y = -cursor.y; 
       cursorV.onDraw(cursorV.e); 
       rLO.addView(cursorV); 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
      // Hardware accelerated at runtime 
      getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, 
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 

      //update pointer to new position of stylus/finger 
      cursor.x = (int)event.getRawX() - (cursor.radius/2); 
      cursor.y = (int)event.getRawY() - (cursor.radius/2); 
      rLO.removeView(cursor); 
      rLO.addView(cursor); 

      if (hSym > 0) { 
       cursorH.x = -cursor.x; 
       cursorH.y = cursor.y; 
       rLO.removeView(cursorH); 
       rLO.addView(cursorH); 
      } 

      if (vSym > 0) { 
       cursorV.x = cursor.x; 
       cursorV.y = -cursor.y; 
       rLO.removeView(cursorV); 
       rLO.addView(cursorV); 
      } 
      break; 

     case MotionEvent.ACTION_UP: 
      if (vSym > 0 || hSym > 0) { 
       rLO.removeView(cursorH); 
       rLO.removeView(cursorV); 
      } 
      rLO.removeView(cursor); 

      break; 
     } // end switch 

注:「ポインタ」私はのためのコード内で単語「カーソル」を使用 ここに私はこれまで持っているものですポインタ(カーソル)は、円を作成する別のクラスからプログラムで描画されます。

答えて

0

おそらく動作していますが、画面の左上が(0,0)であるという問題があります。負の位置は画面から外れています。代わりに画面の幅や高さをハーフミラーで分割します。

+0

私は以前にそれを修正しました。 symetryコードの前に、画面の幅と高さをそれぞれ2で割ることによって0,0がどこになるかを再計算しました。私はまた、私のビューがまだ動作しているかどうかを確認するために、変更位置を常に更新する2つのテキストビューを追加しました。しかし、私はあなたが言っていることをテストします。なぜなら、私は新しいポインタのための私の修正されたものの代わりにオリジナルのスクリーン・セットアップを計算しているかもしれないからです。 – SpicyWeenie

+0

あなたの名前を追加するのを忘れてしまった:) – SpicyWeenie

関連する問題