我创建了一个View
在自定义内部显示自定义的服务LinearLayout
.该服务工作正常,并View
显示在屏幕上,但我无法接收View
或LinearLayout
接收任何触摸事件(我只是希望其中一个接收触摸事件,我不关心哪个).这就是我所拥有的:
MyLayout.java
public class MyLayout extends LinearLayout { public MyLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyLayout(Context context, AttributeSet attrs) { super(context, attrs); } public MyLayout(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { onTouchEvent(ev); return true; } @Override public boolean onTouchEvent(MotionEvent event) { Toast.makeText(this.getContext(), "Touched layout", Toast.LENGTH_SHORT).show(); Log.d("TOUCH", "Touched layout"); return true; } }
MyView.java
public class MyViewextends View{ public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } public MyView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { Toast.makeText(this.getContext(), "Touched View", Toast.LENGTH_SHORT).show(); Log.d("TOUCH", "Touched View"); return true; } }
小智.. 7
从SDK文档:
onTouch() - 返回一个布尔值,指示您的侦听器是否使用此事件.重要的是这个事件可以有多个相互跟随的动作.因此,如果在收到向下操作事件时返回false,则表示您尚未使用该事件,并且对此事件的后续操作也不感兴趣.因此,您不会在事件中调用任何其他操作,例如手指手势或最终的上行动作事件.
触发ACTION_DOWN事件时,您需要返回true,以指示您对与该同一事件相关的后续调用感兴趣.
如果你需要在View类中编写一个Android onTouchEvent方法,这里有一些示例源代码(样板/框架代码),它们展示了如何实现这个方法,包括如何在方法中使用MotionEvent,以及如何获取x和y触摸事件的位置:
public boolean onTouchEvent(MotionEvent event) { int eventAction = event.getAction(); // you may need the x/y location int x = (int)event.getX(); int y = (int)event.getY(); // put your code in here to handle the event switch (eventAction) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_MOVE: break; } // tell the View to redraw the Canvas invalidate(); // tell the View that we handled the event return true; }
我对代码进行了评论,我认为它显示了使用此方法的最常见方式,因此我不打算在此处添加任何解释.我展示了如何获取触摸事件的x和y位置,因为您通常需要检查以查看事件发生的位置.
总而言之,如果你想看一个示例Android onTouchEvent方法(在View类中),我希望这个例子很有帮助.
参考:http://alvinalexander.com/android/android-ontouchevent-example-method-view-class
从SDK文档:
onTouch() - 返回一个布尔值,指示您的侦听器是否使用此事件.重要的是这个事件可以有多个相互跟随的动作.因此,如果在收到向下操作事件时返回false,则表示您尚未使用该事件,并且对此事件的后续操作也不感兴趣.因此,您不会在事件中调用任何其他操作,例如手指手势或最终的上行动作事件.
触发ACTION_DOWN事件时,您需要返回true,以指示您对与该同一事件相关的后续调用感兴趣.
如果你需要在View类中编写一个Android onTouchEvent方法,这里有一些示例源代码(样板/框架代码),它们展示了如何实现这个方法,包括如何在方法中使用MotionEvent,以及如何获取x和y触摸事件的位置:
public boolean onTouchEvent(MotionEvent event) { int eventAction = event.getAction(); // you may need the x/y location int x = (int)event.getX(); int y = (int)event.getY(); // put your code in here to handle the event switch (eventAction) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_MOVE: break; } // tell the View to redraw the Canvas invalidate(); // tell the View that we handled the event return true; }
我对代码进行了评论,我认为它显示了使用此方法的最常见方式,因此我不打算在此处添加任何解释.我展示了如何获取触摸事件的x和y位置,因为您通常需要检查以查看事件发生的位置.
总而言之,如果你想看一个示例Android onTouchEvent方法(在View类中),我希望这个例子很有帮助.
参考:http://alvinalexander.com/android/android-ontouchevent-example-method-view-class