2012-01-20 37 views
0

我遇到了我的平板電腦指針問題。我正在設計一個藝術應用程序,我試圖弄清楚如何鏡像我的動作(對稱)。目前,如果您用手指或觸控筆觸摸屏幕,則會繪製圖像(以編程方式生成的圓形),並自動更新至移動手指/觸控筆的任何位置。這工作完美。但是現在我想添加兩個新功能:水平和垂直對稱。所以如果你選擇水平對稱,另一個指針將出現在相反的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。我還添加了兩個文本視圖,這些視圖將不斷更新,以便查看我的視圖是否仍然有效(迄今爲止這麼好)。但是我會測試你在說什麼,因爲也許我正在計算原始屏幕設置,而不是我爲新指針修改的屏幕設置。 – SpicyWeenie

+0

忘了添加你的名字:) – SpicyWeenie