我有一个图像,可以移动和缩放捏手势。所有这一切都在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