Android:未调用自定义按钮 OnClickListener

标签 android gridview custom-controls onclick touch

我有一个自定义按钮,我正在其上捕获它的 onTouchEvent。

public class CustomNumber extends ToggleButton {
boolean drawGlow = false;
float glowX = 0;
float glowY = 0;
float radius = 30;


public CustomNumber(Context context) {
    super(context);
}


public CustomNumber(Context context, AttributeSet attrs) {
    super(context, attrs);
}


public CustomNumber(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}


Paint paint = new Paint();
{
    paint.setAntiAlias(true);
    paint.setColor(Color.WHITE);
    paint.setAlpha(70);
};

@Override
public void draw(Canvas canvas){
    super.draw(canvas);
    if(drawGlow)
        canvas.drawCircle(glowX, glowY, radius, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        drawGlow = true;
    }else if(event.getAction() == MotionEvent.ACTION_UP)
        drawGlow = false;
    }
    glowX = event.getX();
    glowY = event.getY();
    this.invalidate();
    return true;
}

这个自定义按钮是网格的一部分。当我将这个按钮添加到网格时,我已经为它设置了一个 OnClickListener。但是,永远不会调用 OnClickListener 中的代码。

GridAdapter 代码,我在其中添加带有监听器的按钮:

public View getView(final int position, final View convertView, final ViewGroup parent) {
    CustomNumber tBtn;
    if (convertView == null) {
        tBtn = new CustomNumber(context);
        tBtn.setTextOff("");
        tBtn.setTextOn("");
        tBtn.setChecked(false);
        tBtn.setId(position);
        tBtn.setOnClickListener(tBtnListener);
        tBtn.setLayoutParams(new GridView.LayoutParams(35, 35));
    } else {
        tBtn = (CustomNumber) convertView;
    }
    return tBtn;
}

请帮忙。

最佳答案

在您的 onTouchEvent 实现中,代替“return true;”,做...

return super.onTouchEvent(event);

您正在覆盖负责调用监听器的父类(super class)的实现。通过调用父类(super class)的实现,它应该像以前一样运行。这就是为什么当您注释掉该方法时您的代码可以工作的原因 - 因为您不再覆盖父类(super class)的实现

关于Android:未调用自定义按钮 OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422358/

相关文章:

android - 如何在 android 中应用 SELECT date ('now' ) 查询?

Android AAR Artifact 发布在组装之前执行

python - 自定义 pyGTK 按钮

.NET WinForms 自定义控件 : how to get a reference to the containing form

winforms - 如何在 WinForms 中制作 ownerdraw Trackbar

Android_无法播放MediaMuxer生成的mp4文件

android - Galaxy Tab 3 奇怪的崩溃

c++ - 如何使用Repeater和GridView从C++将2D数组的值显示为QML

css - 如何隐藏datagridview的第一列添加仍然获取数据

android - GridView 项目没有向下滚动到向上(重复项目)以及当我从 Android 中的服务器加载数据时?