点击/触摸时具有按钮行为的自定义视图

6 浏览
0 Comments

点击/触摸时具有按钮行为的自定义视图

我创建了一个自定义的View,通常会将一个onClickListner附加到它上面。我希望它具有一些按钮的行为:如果被按下,它应该改变自己的外观,这在onDraw()方法中定义。然而,以下代码无效:

//在我的自定义View中:
@Override
protected void onDraw(Canvas canvas)
{
    boolean pressed = isPressed();
    //根据pressed的值进行绘制
}
//创建View时:
MyView.setClickable(true);

pressed始终为false,有什么问题吗?

非常感谢!

0
0 Comments

问题出现的原因是,当我们创建一个自定义的按钮,并且希望在点击时绘制出特定的效果时,我们需要在点击事件中对视图进行重新绘制。如果我们忘记在点击事件中调用invalidate()方法,就无法实现这个效果。

解决方法是,在点击事件的处理方法中调用invalidate()方法。invalidate()方法会使视图无效,并触发视图的重新绘制。这样,当用户点击按钮时,按钮的外观就会发生改变,以显示点击效果。

具体实现代码如下:

public boolean onTouch(View v, MotionEvent event) {
    /* 解析事件 */
    this.invalidate();
    return true;
}

在这段代码中,我们在onTouch()方法中调用了invalidate()方法。这将使视图无效,并触发视图的重新绘制。

通过这种方式,我们可以实现自定义视图的按钮效果。当用户点击按钮时,按钮的外观会发生改变,以提供点击反馈。

0
0 Comments

问题的出现的原因是,用户想要在点击或触摸时实现类似按钮的行为,但是不想直接使用按钮。

解决方法是,考虑直接使用按钮来实现所需的功能。可以使用ToggleButton,并在xml中编写一个简短的选择器,以便在按下或未按下时指定要使用的图像。

具体解决方法可以参考以下问题:这个问题 的回答。

0
0 Comments

问题的出现原因是自定义视图中没有实现点击或触摸事件。视图没有点击事件,但可以使用触摸事件代替,所以下面的代码应该适用于您:

您的错误是您没有为自定义视图实现点击或触摸事件。视图没有点击事件,但可以使用触摸事件代替,所以下面的代码应该适用于您:

myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                break;
        }
        return true;
    }
});

在这段代码中,使用`ACTION_UP`来模拟点击操作,这样就可以解决您的问题。

0