我需要在这里实现的目标如下 1)在PNG图像上叠加一个transperent“点”;用户点击的位置。 2)当用户长时间保持触摸时,叠加一个transperent“大圆圈”。 3)在Doble上点击“清除屏幕”
我主要使用“onTouchEvent”进行点击事件检测...和“geastureDetector”进行双击检测......但没有得到所需的结果。
这是我正在尝试的两个实现
第一种方法工作正常...但是生成的点击事件有一些偏差...我的意思是说捕获的点击事件总是偏移约Y像素方向50像素....我无法弄清楚为什么会发生这种情况..
class Tileview extends Activity implements GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener {
onCreate(){
//add the View Thing here.
}
@Override
public void onLongPress(MotionEvent e) {
// "longPress Detected"
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// "longPress Detected"
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int action = event.getActionMasked();
switch(action){
case MotionEvent.ACTION_DOWN:
mClickX = event.getX();
mClickY = event.getY();
}
myTileView.invalidate();
return mGestureDetector.onTouchEvent(event);
}
private class MyTileView extends View{
protected void onDraw(Canvas canvas){
// Canvas & Paint stuff - for translucent cicle
c.drawCircle(mClickX, mClickY, 75.0f, p);
}
}
另一种方法是能够将图像恰好叠加在适当的位置;但是当我在“View”而不是Activity中添加DoubleTap实现时,doubleTap / geastureListeners永远不会触发.... 只有改变我在那种情况下才能获得onTouchEvent() - 并在“视图”类中进行相应的实现....
class TileActivity extends Activity {
OnCreate()
{
// Bla Bla Bla
}
private class TileView extends View implements OnDoubleTapListener, OnGestureListener{
@override
onTouchEvent(){
// get co-ordinates here from MotionEvent
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// THIS WON'T EVEN GET FIRED
// In this case the doubleTap detection is not working
clearEntireScreen = true;
return false;
}
}
}
答案 0 :(得分:0)
问题是当手势检测器未检测到双击或长按时,onTouchEvent未返回true?我会在mGestureDetector.onTouchEvent
的开头调用onTouchEvent
,如果返回false,则只继续执行ACTION_DOWN处理。在这种情况下,onTouchEvent
应该确保返回true:
@Override
public boolean onTouchEvent
(
MotionEvent event
)
{
boolean Handled = mGestureDetector.onTouchEvent(event);
if (!Handled)
{
final int action = event.getActionMasked();
switch(action)
{
case MotionEvent.ACTION_DOWN:
mClickX = event.getX();
mClickY = event.getY();
Handled = true;
break;
} /*switch*/
myTileView.invalidate();
} /*if*/
return
Handled;
} /*onTouchEvent*/
答案 1 :(得分:0)
现在已经解决了...... !! 似乎解决问题的最佳方法是创建gestureDetector类并实现“SimpleOnGestureListener”..
我不得不稍微调整一下实现......但是骨架代码与本文中的解释更相似...... Fling gesture detection on grid layout
我必须覆盖LongPress / onDoubleTap / onSigleTapUp / onSingletapconfirmed方法才能达到预期效果......
感谢您的帮助...... !!