我想在我的android项目中制作此形状。如何使用形状制作这种形状?
尝试这种方式
您可以使用MaterialButton
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
android:text="Nilesh rathod"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content"
app:shapeAppearanceOverlay="@style/CustomShapeAppearanceOverlay.Button"/>
现在在您的CustomShapeAppearanceOverlay.Button
中创建styles.xml
<style name="CustomShapeAppearanceOverlay.Button" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopLeft">18dp</item>
<item name="cornerSizeBottomLeft">18dp</item>
<item name="cornerFamilyTopLeft">cut</item>
<item name="cornerFamilyBottomLeft">cut</item>
<item name="cornerSizeTopRight">0dp</item>
<item name="cornerSizeBottomRight">0dp</item>
</style>
确保已添加dependencies
库中的material
implementation 'com.google.android.material:material:1.1.0-alpha10'
输出
,您可以尝试以下方法:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size
android:width="100dp"
android:height="40dp" />
<solid android:color="#FAD55C" />
</shape>
</item>
<item
android:top="-40dp"
android:bottom="60dp"
android:start="-24dp">
<rotate
android:fromDegrees="315">
<shape android:shape="rectangle">
<solid android:color="#FFF" />
</shape>
</rotate>
</item>
<item
android:top="60dp"
android:bottom="-40dp"
android:start="-24dp">
<rotate
android:fromDegrees="-315">
<shape android:shape="rectangle">
<solid android:color="#FFF" />
</shape>
</rotate>
</item>
</layer-list>
,
像这样创建自定义可绘制类
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class ArrowDrawable extends Drawable {
private Rect mBounds;
private Paint mDrawPaint;
public ArrowDrawable() {
mDrawPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
mDrawPaint.setColor(Color.BLUE);
}
@Override
public void draw(@NonNull Canvas canvas) {
mBounds=getBounds();
Path path=new Path();
path.moveTo(mBounds.left,mBounds.bottom/2);
path.lineTo(mBounds.right/8,mBounds.top);
path.lineTo(mBounds.right,mBounds.bottom);
path.lineTo(mBounds.right/8,mBounds.bottom);
path.lineTo(mBounds.left,mBounds.bottom/2);
canvas.drawPath(path,mDrawPaint);
}
@Override
public void setAlpha(int alpha) {
mDrawPaint.setAlpha(alpha);
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
mDrawPaint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}
将Drawable
设置为TextView
ArrowDrawable arrowDrawable=new ArrowDrawable();
textView.setBackground(arrowDrawable);