自定义ImageButton视图

时间:2013-05-16 08:15:59

标签: android onclicklistener android-custom-view ontouchlistener

我制作了一个奇怪形状的自定义按钮,所以我覆盖了`dispatchTouchEvent。 然后我添加了一个onTouch监听器,以便在触摸时更改图像。 onClick属性停止工作,所以我添加了一个onClick Listener。 现在,onClick侦听器或onClick属性都没有触发 有人知道为什么吗?我似乎无法解决这个问题。

这是自定义视图:

@Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        double iX = (double) event.getX();
        double iY = (double) event.getY();
        String isLeft = (String) getContentDescription();
        double Ymax;
        if(isLeft.equals("left"))
            Ymax = Math.sqrt((this.getWidth()*getWidth()) - ((getWidth() - iX)*(getWidth() - iX)) + (getHeight()*1.2));
        else
            Ymax = Math.sqrt((this.getWidth()*getWidth()) - ((iX)*(iX)) + (getHeight()*1.2));

            if (!(iY>Ymax || iY<0.0 || iX>getWidth() || iX<0.0)) {
                return false;
            }
        return super.dispatchTouchEvent(event);
    }

在mainActivity onCreate:

final CornerButton LeftCornerButton = (CornerButton) findViewById(R.id.LeftButton);
    LeftCornerButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction() == (MotionEvent.ACTION_UP)){
                LeftCornerButton.setBackgroundResource(R.drawable.cornerleft);
            }
            else{
                LeftCornerButton.setBackgroundResource(R.drawable.cornerleftdark);
            }
            return true;
        }
    });
    LeftCornerButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showEvents(v);
        }
    });

触摸检测功能完美,图像翻转效果也很好。 我无法将点击操作放在(event.getAction() == (MotionEvent.ACTION_UP) else blcock中,因为它多次调用了intent。

1 个答案:

答案 0 :(得分:1)

您正在从方法true返回onTouch(View v, MotionEvent event),这样做是告诉系统您正在处理所有触摸事件,如果您想要检测点击事件,请返回{{方法false

中的1}}