2016-08-17 2 views
1

Gibt es eine Möglichkeit, ein gleichschenkliges Dreieck zu machen, das ich als Knopf mit Android benutzen kann?Einen dreieckigen Knopf in Android machen

Diese Taste führt den gesamten Bildschirm:

enter image description here

Hier ist meine aktuelle xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="@drawable/main_menu_bg" 
    > 

    <RelativeLayout 
     android:layout_centerInParent="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/ai_button" 
       android:background="@drawable/ai_button" 
       android:layout_alignParentLeft="true" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

    </RelativeLayout> 

</RelativeLayout> 

Ich habe versucht, die ShapeDrawable mit einem Dreieck zu erstellen, wie die Schaltfläche aussieht Ich brauche, aber ich ShapeDrawable funktioniert nicht, ich habe versucht, ein ImageButton, aber die Schaltfläche nimmt den gesamten Bildschirm, ich habe versucht, mit einer normalen Schaltfläche, aber die Schaltfläche nimmt immer noch den gesamten Bildschirm, und ich habe versucht, ein ImageView aber es immer noch macht das Gleiche.

Die Größe der Schaltfläche ist immer zu groß und wenn ich die tatsächliche Größe der Schaltfläche verkleinere, verkleinert sich das Bild selbst und ich kann keine Möglichkeit finden, das Bild zu strecken, um entweder die Ansicht oder die Schaltfläche zu füllen.

Ich habe versucht, dies in Android Studio zu bauen, weil die Option zur Vorschau ist sehr praktisch, aber wenn es etwas gibt, das ich in Xamarin verwenden kann, oder wenn ich etwas programmgesteuert tun kann, bin ich offen.

Antwort

0

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> 

Use it in your layout 

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); 


} 
} 

In Bezug auf die XML-Beispiel | es gibt zwei überlappende Rechtecke. Sie müssen viel mit den Werten herumspielen und das macht es schwierig, auf verschiedenen Ansichten zu verwenden. Ich denke, dass die Verwendung einer benutzerdefinierten Ansicht in diesem Fall die beste Lösung ist.

0

Sie müssen Bildschirmhöhe messen und wissen, wie viel (z. B. in Prozent) Ihre Schaltfläche abdecken wird. aber du kommst hier sehr schlecht voran. Beispiel: Es gibt zwei Geräte mit Full-HD-Display, eines mit den physischen Tasten Home/Switch/Back, das Zweite mit On-Screen - Ihr Bitmap wird auf einem davon gestreckt, also sollten Sie auch Ihren Button richtig dehnen ... und Sie haben wrap_content Sets für Ihre ImageView so wird es unabhängig vertikal gestreckt Hintergrund „fixed“ Höhe hat ... tun, um diese Art und Weise

bearbeiten nicht gehen: Sie versuchen, param von Linearlayout für die Berechnung der „Prozentsatz“ Größe der Taste weightSum können. nicht so gut, könnte aber sein, was Sie brauchen

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="3" 
    android:gravity="center" 
    android:src="@drawable/main_menu_bg" 
    > 

     <ImageView 
      android:id="@+id/ai_button" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:src="@drawable/ai_button" 
      android:scaleType="fitXY"/> 

</RelativeLayout>