Как я могу сделать эту форму в Android, используя форму Drawable - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу сделать эту форму в моем проекте Android. как я могу сделать эту форму, используя форму?

enter image description here

Ответы [ 3 ]

0 голосов
/ 04 ноября 2019

Вы можете попробовать это:

<?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>

enter image description here

0 голосов
/ 04 ноября 2019

Создайте пользовательский класс Drawable, подобный этому

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.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);
0 голосов
/ 04 ноября 2019

Попробуйте следующим образом

Вы достигнете этого, используя 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'

ВЫХОД

enter image description here

...