如何创建自定义按钮形状类

时间:2019-01-11 00:15:07

标签: java android

我正在对此进行解释,以解释我试图创建一个带有圆角的按钮作为小部件的一部分,该按钮可以通过编程将其颜色更改为任何颜色。当我当前使用SetInt执行此操作时,按钮的默认形状会变回矩形。看来,RemoteViews不支持在活动中实现此目的的常用方法,因此此问题可能无法回答。无论如何,谢谢迈克指出这一点。

我想知道这是否简单。我想创建一个新的按钮类-基本上只是一个带有圆角的普通按钮。这样做的原因是,我希望能够使用...以编程方式将按钮的背景色更改为任何颜色。

mybutton.setBackgroundColor(Color.parsecolor(somehexvalue));

,而按钮不会变形(即恢复为矩形)。

我已经创建了我的按钮类,并且了解我需要覆盖OnDraw方法,但是并不能真正理解此时我如何应用自定义形状。这简单吗?

@RemoteView
public class custombutton extends       android.support.v7.widget.AppCompatButton {

    Paint paint = null;

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

        paint = new Paint();
    }

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

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


@Override
protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        What do I need to do here to create a button with rounded corners???

    }

}

谢谢!!!!

1 个答案:

答案 0 :(得分:2)

您不需要Customview。

代替setBackgroundColor,在需要更改时检索可绘制的背景  背景,并设置其颜色:

v.setBackgroundResource(R.drawable.tags_rounded_corners);

GradientDrawable drawable = (GradientDrawable) v.getBackground();
if (i % 2 == 0) {
  drawable.setColor(Color.RED);
} else {
  drawable.setColor(Color.BLUE);
}