简体   繁体   English

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

[英]How to create a custom shape for a Button

How to create a custom shape for a Button? 如何为按钮创建自定义形状? Can I set different colors to button background colors for many conditions.Any help will be appreciated.Thanks. 我可以在许多情况下为按钮背景色设置不同的颜色吗,谢谢您的帮助。 在此处输入图片说明

How to create a custom shape for a Button? 如何为按钮创建自定义形状?

Create a test.xml file in drawable and add code: 在drawable中创建一个test.xml文件并添加代码:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@+id/one">       //<---- id is must for color change
    <shape android:shape="rectangle">
        <size
            android:width="150dp"
            android:height="40dp" />
        <solid android:color="@color/colorPrimary" />
        <corners android:radius="10dp"/> //<---- remove radius if not needed
    </shape>
</item>

<item
    android:top="10dp"
    android:bottom="-12dp"
    android:left="-55dp"
    android:width="75dp">
    <rotate
        android:fromDegrees="-47">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
        </shape>
    </rotate>
</item>
</layer-list>

In button: 在按钮中:

     <Button
        .....
        android:background="@drawable/test"
        ...../>

Output 输出量

在此处输入图片说明

Can I set different colors to button background colors for many conditions? 在许多情况下,可以为按钮背景色设置不同的颜色吗?

Yes, you can change at run-time. 是的,您可以在运行时进行更改。 For that you have to assign id to each item to know where you want to make changes. 为此,您必须为每个项目分配ID,以知道要在哪里进行更改。 As I did on my answer code. 就像我在回答代码上所做的一样。

LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(Your_Activity.this, R.drawable.your_shape_test);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.id_of_drawable-one);
gradientDrawable.setColor(your_color);

Try this code: 试试这个代码:

在此处输入图片说明

public class ButtonBackGroundDrawable extends Drawable {
private Paint paint;

public ButtonBackGroundDrawable() {
    paint = new Paint();
    paint.setAntiAlias(true);
}

@Override
public void draw(Canvas canvas) {

    int height = getBounds().height();
    int width = getBounds().width();
    RectF rect = new RectF(0.0f, 0.0f, width, height);
    Point point0_draw = new Point(0, 0);
    Point point1_draw = new Point(width, 0);
    Point point2_draw = new Point(width, height);
    Point point3_draw = new Point(0, height);
    Point point4_draw = new Point(width / 10, height / 2);

    Path path = new Path();
    path.moveTo(point0_draw.x, point0_draw.y);
    path.lineTo(point1_draw.x, point1_draw.y);
    path.lineTo(point2_draw.x, point2_draw.y);
    path.lineTo(point3_draw.x, point3_draw.y);
    path.lineTo(point4_draw.x, point4_draw.y);
    path.lineTo(point0_draw.x, point0_draw.y);
    path.close();
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(Color.CYAN);
 //        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawPath(path, paint);
}

@Override
public void setAlpha(int alpha) {
    paint.setAlpha(alpha);
}

@Override
public void setColorFilter(ColorFilter colorFilter) {
    paint.setColorFilter(colorFilter);
}

@Override
public int getOpacity() {
    return PixelFormat.TRANSLUCENT;
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM