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
注: 我用了「光標」中的代碼「指針」。指針(光標)以編程方式從創建圓的不同類中繪製。
我已經修復了這個問題。在symetry代碼之前,我通過將屏幕的寬度和高度分別除以2來重新計算我想要的0,0。我還添加了兩個文本視圖,這些視圖將不斷更新,以便查看我的視圖是否仍然有效(迄今爲止這麼好)。但是我會測試你在說什麼,因爲也許我正在計算原始屏幕設置,而不是我爲新指針修改的屏幕設置。 – SpicyWeenie
忘了添加你的名字:) – SpicyWeenie