Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为按钮创建自定义形状_Java_Android_Android Layout_Android Xml_Android Shape - Fatal编程技术网

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

Java 如何为按钮创建自定义形状,java,android,android-layout,android-xml,android-shape,Java,Android,Android Layout,Android Xml,Android Shape,如何为按钮创建自定义形状?我可以设置不同的颜色按钮背景颜色为许多条件。任何帮助将不胜感激。谢谢 如何为按钮创建自定义形状 在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">

如何为按钮创建自定义形状?我可以设置不同的颜色按钮背景颜色为许多条件。任何帮助将不胜感激。谢谢

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

在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>
如何为按钮创建自定义形状

在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>
请尝试以下代码:

请尝试以下代码:



您可以使用此png作为按钮的背景,并可以使用“着色”属性更改背景图像的颜色为此形状生成九个面片图像查看此处:@Kamran Ahmed Khan,如何使用“着色”方法更改背景image@HtooAungHlaing,检查答案,我发布了manYou可以使用此png作为按钮的背景,并可以使用“着色”属性更改背景图像的颜色为此形状生成九个补丁图像查看此处:@Kamran Ahmed Khan,我如何使用“着色”方法更改背景image@HtooAungHlaing,检查答案,我在DesignView中发布了manit,但当我真的在设备上运行时,它无法得到真实的结果result@HtooAungHlaing,好的,我没有面对这个问题,让我再看看我的代码。谢谢@W4R10CK,谢谢你的帮助help@HtooAungHlaing,我不知道为什么它不适合你。我也在我的应用程序上添加了相同的布局。查看真实设备的输出图像。它似乎在DesignView中工作,但当我真正在设备上运行时,它无法获取真实图像result@HtooAungHlaing,好的,我没有面对这个问题,让我再看看我的代码。谢谢@W4R10CK,谢谢你的帮助help@HtooAungHlaing,我不知道为什么它不适合你。我也在我的应用程序上添加了相同的布局。查看真实设备的输出图像。感谢您的回复。如果要更改宽度,请将w/10更改为您的值。如果您节省了时间,请接受我的回答。是的,宽度是可以的,为自定义颜色集添加setColor方法,并且已经接受其中一个是我的,谢谢您的回复。如果要更改宽度,请将w/10更改为您的值。如果节省了时间,请接受我的回答。是的,宽度可以,为自定义颜色集添加setColor方法,并且已经接受其中一个是我的,谢谢
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);
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;
}
}