【问题标题】:extending android button by using onDraw使用 onDraw 扩展 android 按钮
【发布时间】:2014-08-25 18:08:30
【问题描述】:

我想改变我的按钮形状但我想使用 onDaw 方法和 EXTENDING 按钮 班级。所以我刚开始做的是:

     <view class = "com.example.button.MainActivity$MyButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
     />

    public static class MyButton extends Button {


     public MyButton(Context context) {
      super(context);

     }

     public MyButton(Context context, AttributeSet attrs) {
      super(context, attrs);

     }

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

     }

     @Override
     protected void onDraw(Canvas canvas) {

            Paint paint = new Paint();
            paint.setColor(Color.BLUE);
            paint.setStrokeWidth(10);
            paint.setStyle(Style.FILL);
            int width = getWidth();
            int height = getHeight();
            canvas.drawCircle(width/2, height/2, height/3, paint);

      } 
}

但我在按钮视图矩形上得到一个蓝色圆圈。

我想看到只是蓝色圆圈作为按钮形状,我得到了矩形的骑乘。 有什么帮助吗??

【问题讨论】:

  • 你忘记了 super.onDraw(canvas) 调用。
  • 是的,但还是同样的问题。 . .
  • 我可能在这方面有很长的路要走,但请尝试将 xml 中的背景设置为透明。
  • 其实这是我项目的主要思路,如果我将按钮的背景改为透明的围绕圆圈点击可能会调用按钮点击方法。
  • 您的 getWidth 和 getHeight 方法有误。使用 canvas.getWidth 和 canvas.getHeight

标签: android android-view android-custom-view android-button


【解决方案1】:

在 xml 中将背景设置为透明(就像hypd09 所说的那样)并覆盖 onTouchListener,这样只有在您点击蓝色圆圈时点击才会起作用。

setOnTouchListener 控制点击位置是否在蓝色圆圈内。你可以得到像this这样的触摸位置。

您甚至可以允许通过以下方式设置 onClickListener(将其添加到您的 MyButton 类中):

@Override
public void setOnClickListener(final OnClickListener onClickListener) {
    MyButton.this.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event){
            if (isWithinCircle(event))
            {
                onClickListener.onClick(v);
            }
        }
    });
}

【讨论】:

  • 很好,但是如果我的形状有点复杂,我应该怎么做才能找到答案,例如像五边形这样的东西。找到一个好的规则来检查任何点是否被它包围是很困难的。
  • 我认为除非你能够更精确地定义你的形状(例如通过说明什么样的函数构建你的形状的侧面并将它们与触摸事件的坐标进行比较),否则 android 本身只能给你包含你的形状的矩形。
  • 我的形状是由路径构建的。我走在我形状的边界上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多