Quiero crear este usando el botón (TextView) mediante el uso de XML definición:

Android: Hacer un botón con forma de triángulo usando definiciones xml (dibujable)

En el diseño de la Actividad que tengo:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_arrow" <!-- I NEED IMPLEMENT THIS -->
        android:clickable="true"
        android:drawablePadding="7dp"
        android:gravity="center"
        android:drawableLeft="@drawable/music_cloud"
        android:onClick="exportSong"
        android:padding="20dp"
        android:text="@string/export_upload"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/dark_yellow_text_color"
        android:textStyle="bold" />

Yo fundó varias publicaciones:

hacer-un-triángulo-la forma-el uso de xml-definiciones

Android triángulo (flecha) que se define como una forma de XML

o Android – hacer en forma de flecha con xml

He intentado modificar varios XML de definición de pero nada era bueno. ¿Hay alguna manera fácil de cómo implementar esta forma? También se debe tener un fondo transparente.

xnl formas no son un «propósito general» manera de declarar todos los dibujables que uno necesita, trate de escribir sus personalizada de android.gráficos.dibujable.formas.Forma y lo uso con un ShapeDrawable

OriginalEl autor Pepa Zapletal | 2015-02-01

2 Comentarios

  1. 8

    Si alguien todavía tiene problemas con esto :

    1. xml:

      <item android:top="45dp">
          <shape>
              <size android:height="100dp" android:width="90dp"/>
              <solid android:color="@android:color/holo_orange_light" />
          </shape>
      </item>
      <item android:top="36dp" android:left="11dp">
          <rotate
              android:fromDegrees="45"
              android:toDegrees="0"
              android:pivotX="80%"
              android:pivotY="20%" >
              <shape>
                  <size android:width="40dp"
                      android:height="30dp"/>
                  <stroke android:color="@android:color/holo_orange_light" android:width="1dp"/>
                  <solid android:color="@android:color/holo_orange_light" />
              </shape>
          </rotate>
      </item>
      </layer-list>
    2. reemplazar TextView y utilizar en su diseño:

      public class CustomTextView extends TextView {
      
          private int mWidth;
          private int mHeight;
      
      
          public CustomTextView(Context context, AttributeSet attrs)  {
              super(context, attrs);
      
          }
      
          @Override
          protected void onDraw(Canvas canvas) {
      
             super.onDraw(canvas);
              Paint mPaint = new Paint();
              int color = getResources().getColor(R.color.YourColor);
      
              mPaint.setColor(color);
              Path mPath = new Path();
              mPath.moveTo(.0f, this.getHeight());
              mPath.lineTo(0.8f * this.getWidth(), this.getHeight());
              mPath.lineTo(this.getWidth(), 0.5f * this.getHeight());
              mPath.lineTo(0.8f * this.getWidth(), .0f);
              mPath.lineTo(.0f, .0f);
              mPath.lineTo(.0f, this.getHeight());
      
              canvas.clipPath(mPath);
              canvas.drawPath(mPath,mPaint);
      
      
          }
      }

    Sobre el xml de ejemplo: hay dos rectángulos superpuestos.Tienes que jugar con los valores mucho y esto hace que sea difícil de usar en diferentes puntos de vista. Creo que el uso de una vista personalizada es la mejor solución en este caso.

    A veces sólo tienes que desglose y hacer una Vista personalizada. Gracias por hacer un bonito y simple ejemplo.
    pero parece que el texto de la Propiedad se perderán si utilizamos el código !
    Acabo de poner el super.onDraw(canvas); la llamada al final de Método onDraw , así que va a hacer que este código funcione correctamente

    OriginalEl autor Hanelore Ianoseck

  2. 0

    <item>
    <inset android:insetBottom="2dp" >
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true">
    <shape android:shape="rectangle" >
    <corners android:radius="3dip" />
    <stroke
    android:width="1dip"
    android:color="#5e7974" />
    <gradient
    android:angle="-90"
    android:centerColor="#ECEFF1"
    android:endColor="#FFAB00"
    android:startColor="#FFAB00" />
    </shape>
    </item>
    <item android:state_focused="true">
    <shape android:shape="rectangle" >
    <corners android:radius="3dip" />
    <stroke
    android:width="1dip"
    android:color="#5e7974" />
    <gradient
    android:angle="-90"
    android:centerColor="#ECEFF1"
    android:endColor="#FFAB00"
    android:startColor="#FFAB00" />
    </shape>
    </item>
    <item>
    <shape android:shape="rectangle" >
    <corners android:radius="3dip" />
    <stroke
    android:width="1dip"
    android:color="#5e7974" />
    <gradient
    android:angle="-90"
    android:centerColor="#ECEFF1"
    android:endColor="#FFD600"
    android:startColor="#FFD600" />
    </shape>
    </item>
    </selector>
    </inset>
    </item>
    <item
    android:bottom="65dp"
    android:right="-129dp"
    android:top="-40dp">
    <rotate android:fromDegrees="50" >
    <shape android:shape="rectangle" >
    <solid android:color="@color/background_color_light_yellow" />
    </shape>
    </rotate>
    </item>
    <item
    android:bottom="-40dp"
    android:right="-129dp"
    android:top="65dp">
    <rotate android:fromDegrees="-50" >
    <shape android:shape="rectangle" >
    <solid android:color="@color/background_color_light_yellow" />
    </shape>
    </rotate>
    </item>

    OriginalEl autor Ajay Adkar

Dejar respuesta

Please enter your comment!
Please enter your name here