我有一個圖像,可以移動和縮放捏手勢。所有這一切都在onTouch()
內完成。我想限制這個,並且只有在用戶完成圖像上的長按操作後才能移動(並且可縮放)。我該怎麼做?Android:如何在onLongClick之後調用onTouch?
5
A
回答
9
註冊一個LongCLickListener。如果識別出長時間點擊,則將標誌設置爲真。
在OnTouch方法中,只有標誌設置爲true時才允許縮放和移動。移動和縮放後,將標誌再次設置爲假。
下面是一些僞代碼:
public class MyActivity extends Activity {
private boolean longClick = false;
public boolean onTouch(View v, MotionEvent event) {
if (longClick) {
// do scaling and moving ...
longClick = false;
}
return false;
}
public boolean onLongClick(View v) {
longClick = true;
return false;
}
}
2
Roflcoptr的主要思路是正確的,但即使你沒有將長按移動鼠標指針,onLongClick將被調用。爲了避免這種情況,您可以使用此代碼:
final int NONE=0;
final int DRAG=1;
final int LONG_PRESS=2;
int mode=NONE;
PointF start=new PointF();
public boolean onLongClick(View v) {
if(mode==NONE) mode=LONG_PRESS; //it helps to avoid unwanted onLongClick
return false;
}
public boolean onTouch(View v, MotionEvent event){
switch(event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
start.set(event.getX(),event.getY()); //point where we started from
break;
case MotionEvent.ACTION_UP:
mode=NONE;
break;
case MotionEvent.ACTION_MOVE:
if(mode==NONE && getDistance(event.getX(),event.getY(),start.x,start.y)>30d) mode=DRAG; //if we really move our pointer, then start the drag mode.
//it helps to avoid unwanted moving
if(mode==DRAG){
//do your stuff
}
if(mode==LONG_PRESS){
//do your stuff
}
break;
}
}
//returns distance between 2 points
private double getDistance(float x1,float y1,float x2,float y2){
float dx=Math.abs(x1-x2);
float dy=Math.abs(y1-y2);
return Math.sqrt(dx*dx+dy*dy);
}
希望這將幫助別人)
+0
輝煌的代碼,幫助我!謝謝一堆 – 2013-04-17 18:02:39
2
您可以創建兩個View.ontouchlistener一個用於工作,一個空,並設置監聽器只查看onlongpress
LinearLayout.LayoutParams longpressLP = new LinearLayout.LayoutParams(100,100);
LinearLayout longpress = new LinearLayout(this);
longpress.setBackgroundColor(Color.GREEN);
mainlayout.addView(longpress,longpressLP);
final View.OnTouchListener buttontouch=new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==MotionEvent.ACTION_DOWN)
v.setOnTouchListener(buttontouchnone);
else
Toast.makeText(getApplicationContext(), "Touched", Toast.LENGTH_SHORT).show();
return false;
}
};
final View.OnTouchListener buttontouchnone=new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "None Touch", Toast.LENGTH_SHORT).show();
return false;
}
};
longpress.setOnTouchListener(buttontouch);
longpress.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "LongClick", Toast.LENGTH_SHORT).show();
v.setOnTouchListener(buttontouch);
return true;
}
});
相關問題
- 1. 如何從RelativeLayout調用onClick和onLongClick EditText
- 2. 如何讓onTouch在ViewPager後面的視圖上被調用?
- 3. Android onLongClick TextView的bug
- 4. onlongclick listner in android 2.0.3
- 5. Android onTouch
- 6. 3個動作1個按鈕 - OnClick Ontouch OnLongClick
- 7. OnTouch和OnClick Android之間的區別
- 8. 如何在調用commit()之後路由
- 9. 如何在setContentView(R.layout.main)之後調用onDraw?
- 10. 如何在* onPreferenceChange之後調用函數*
- 11. 未調用Android onTouch(View,MotionEvent),但調用了onTouchEvent(MotionEvent事件)?
- 12. Android - OnTouch做工
- 13. Android和onTouch
- 14. Android Databinding onLongClick不工作
- 15. Android - 刷卡/ onLongClick衝突
- 16. Android EndlessAdapter設置OnLongClick項目
- 17. 如何使用Onclick/Ontouch調用Java中的兩種方法之一?
- 18. 如何在android中使用onTouch在圈中移動視圖
- 19. ontouch在android繪製矩形
- 20. 如何控制android中的ontouch功能?
- 21. 如何在另一個Ajax調用之後運行ajax調用?
- 22. 如何在調用include_javascripts之後調用use_javascript?
- 23. 如何在調用之前/之後使用ContextBoundObject攔截函數調用?
- 24. viewDidUnload在dealloc之後調用?
- 25. Android livesdk如何在LiveAuthClient之後getharedPreferences
- 26. Android:活動onTouch由於片段onClick而未調用
- 27. Android Espresso,我如何執行onLongClick和slideDown繼續?
- 28. 如何使用:之前:在IE6,7之後?
- 29. onLongClick後突出顯示按鈕不亮
- 30. Android onPause()在onStop()後調用
我試圖在ImageView上做到這一點。那麼,我爲它設置了哪些聽衆? onLongClick或onTouch? – 2011-03-29 12:03:11
他們倆。在onLongClick中,您可以檢查以前是否有長時間點擊,並且在onTouch中,您可以像現在這樣做移動和縮放。 – RoflcoptrException 2011-03-29 12:05:23
是的,我不敢恭維。但是說我正在實現一個'ImageView視圖'點擊,那麼我應該寫'view.setOnLongClickListener()'?並設置我的類實現'onLongClickListener'和'onTouchListener'? – 2011-03-30 04:50:13