当前位置:  开发笔记 > 编程语言 > 正文

用于自定义视图的Android onTouchEvent

如何解决《用于自定义视图的AndroidonTouchEvent》经验,为你挑选了1个好方法。

我创建了一个View在自定义内部显示自定义的服务LinearLayout.该服务工作正常,并View显示在屏幕上,但我无法接收ViewLinearLayout接收任何触摸事件(我只是希望其中一个接收触摸事件,我不关心哪个).这就是我所拥有的:

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



1> 小智..:

从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

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有