如何以编程方式更改形状矩形的笔触宽度

时间:2017-05-02 13:38:41

标签: android drawable shape stroke

按下按钮时,如何更改矩形按钮的笔触宽度?

我在自定义按钮的drawable文件夹中创建了一个xml文件。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:radius="9dp"/>
    <gradient
        android:angle="45"
        android:centerX="9%"
        android:centerColor="#84edb2"
        android:startColor="#07e7cb"
        android:endColor="#b0ede3"
        android:type="linear"
        />
    <size
        android:width="40dp"
        android:height="30dp"
        />
    <stroke
        android:width="2dp" // I want to change this programmatically.
        android:color="#2f7E87"
        />
</shape>

以下是我的java代码。 我想按下按钮时改变按钮的笔划宽度。

public static void buttonEffect(View button){
    button.setOnTouchListener(new View.OnTouchListener() {
        ShapeDrawable circle = new ShapeDrawable( new OvalShape() );


        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    Button view = (Button) v;
                    int col = Color.parseColor("#40E0D0");
                    view.getBackground().setColorFilter(col, PorterDuff.Mode.SCREEN);
                    v.invalidate();

                    break;
                }
                case MotionEvent.ACTION_UP:
                    // Your action here on button click
                case MotionEvent.ACTION_CANCEL: {
                    Button view = (Button) v;
                    view.getBackground().clearColorFilter();
                    view.invalidate();
                    break;
                }
            }
            return true;
        }

    });
}

3 个答案:

答案 0 :(得分:2)

尝试以下解决方案,它可以帮助您解决问题。

Here is a screenshot, Have a look

GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{ContextCompat.getColor(this,R.color.red_500),
        ContextCompat.getColor(this,R.color.red_500), ContextCompat.getColor(this,R.color.red_500)});
gd.setShape(GradientDrawable.RECTANGLE);
gd.setStroke((int)0.5, ContextCompat.getColor(this, R.color.black));
gd.setCornerRadius(8f);
gd.setBounds(2, 2, 2, 2);
btnCreateUser.setBackground(gd);

当您单击按钮时,根据您的要求在此行中设置笔划宽度,这样您就不必再使用xml

i.e: gd.setStroke((int)1, ContextCompat.getColor(this, R.color.black));
i.e: gd.setStroke((int)3, ContextCompat.getColor(this, R.color.black));

答案 1 :(得分:1)

我认为解决方案是:  +使用不同大小的笔划创建两个可绘制的形状。  +当触摸按钮时,只需将背景更改为其他可绘制的颜色。

答案 2 :(得分:1)

它基于@DươngNguyễnVăn回答。

您有一个默认笔触宽度为2dp的按钮。现在,当您按下它时,您希望其笔划宽度更改为4dp 因此,您创建了两个可绘制文件: bg_button_2.xml(笔划宽度= 2dp) bg_button_4.xml(笔划宽度= 4dp)。

现在您可以通过编程方式更改其背景。

button.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View view) {
        button.setBackgroundResource(R.drawable.bg_button_4);
      }
});