XML 정의를 사용하여 삼각형 모양을 만드시겠습니까?


133

xml 파일에서 삼각형 모양을 지정할 수있는 방법이 있습니까?

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="triangle">
  <stroke android:width="1dip" android:color="#FFF" />
  <solid android:color="#FFF" />
</shape>

경로 모양이나 다른 것으로 이것을 할 수 있습니까? 나는 단지 정삼각형이 필요합니다.

감사


해결책을 찾았습니까? 같은 문제가 있습니다.
Mike Bevz

이것은 지침을 작성한 사람 (그리고 몇 명의 주석가)을 위해 일한 것 같습니다 : Android : 캔버스에 등변 삼각형 모양 그리기
Diegum

답변:


166

이 게시물 에서는 를 수행하는 방법에 대해 설명합니다. 다음은 XML 정의 삼각형입니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%" >
            <shape
                android:shape="rectangle" >
                <stroke android:color="@color/transparent" android:width="10dp"/>
                <solid
                    android:color="@color/your_color_here" />
            </shape>
        </rotate>
    </item>
</layer-list>

불분명하거나 작성 방법에 대한 설명이 필요한 경우 내 게시물을 참조하십시오. 그것은 컷 아웃 사각형으로 회전합니다 :) 그것은 매우 똑똑하고 잘 작동하는 솔루션입니다.

편집 : 다음과 같이 가리키는 화살표를 만들려면 다음을 사용하십시오.

...
android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="13%"
android:pivotY="-40%" >
...

<-와 같이 가리키는 화살표를 만들려면 다음을 사용하십시오.

android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="87%"
android:pivotY="140%" >

3
죄송합니다. 그러나 정삼각형은 절대 직각 삼각형이 될 수 없습니다.
lilbyrdie

3
@JacekMilewski-감사합니다! 아래쪽 화살표에 사용되는 pivotX / pivotY 매개 변수를 공유 하시겠습니까? 왼쪽? 권리?
JohnnyLambada

2
회전하려면 삼각형 정의 자체가 아닌 레이아웃 xml 파일에서 회전을 변경하십시오.
Jacek Milewski 5

1
-1 . 이건 좋지 않아 보기의 실제 크기는 화면에 나타나는 크기보다 큽니다. 경계를 감 쌌어 야합니다.
Javanator

1
fromDegrees, toDegrees, pivotX 및 pivotY의 값을 도출 한 방법을 공유 할 수 있습니까? 레이아웃 파일에서 회전을 변경할 수없는 유스 케이스가 있습니다.
패트릭 브레넌

82
<TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="▼"/>

당신은 얻을 수 있습니다 여기에 더 많은 옵션을.


3
그 가치를 xml에 어떻게 넣습니까?
user531069 2016 년

2
이 TextView를 복사하여 XML에 붙여 넣기
Elhanan Mishraky

6
@ user531069 : 이것을 strings.xml에 넣으십시오 :<string name="bottom_arrow">&#9660;</string>

1
링크와 다른 화살표가 필요합니다. 복사하여 붙여 넣기 & # 129032; 텍스트로 알려지지 않은 문자가 표시됩니다. ?
M. Usman Khan

2
이 솔루션은 텍스트 뷰에서 글꼴 패딩을 처리하는 새로운 문제를 만듭니다.
살만 카와 니

59

이렇게 vector삼각형을 만드는 데 사용할 수 있습니다

ic_triangle_right.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:pathData="M0,12l0,12 11.5,-5.7c6.3,-3.2 11.5,-6 11.5,-6.3 0,-0.3 -5.2,-3.1 -11.5,-6.3l-11.5,-5.7 0,12z"
        android:strokeColor="#00000000"
        android:fillColor="#000000"/>
</vector>

그런 다음처럼 사용하십시오.

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_triangle_right"
    />

변화의 색상과 방향, 사용 android:tintandroid:rotation

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_triangle_right"
    android:rotation="180" // change direction
    android:tint="#00f" // change color
    />

결과

여기에 이미지 설명을 입력하십시오

벡터의 모양을 변경하기 위해 벡터의 너비 / 높이를 변경할 수 있습니다. 너비를 10dp로 변경하는 예

<vector 
        android:width="10dp"
        android:height="24dp"
        >
       ...
</vector>

여기에 이미지 설명을 입력하십시오


고마워요,이 벡터가 어떻게 작동하는지 모르겠습니다. 나는 결과 필요
호세인 Shahdoost

이 삼각형의 크기를 어떻게 늘리고 줄일 수 있습니까? 높이와 너비를 지정하면 작동하지 않습니다
Aayushi

46

벡터 드로어 블을 사용할 수 있습니다 .

최소 API가 21보다 낮은 경우 Android Studio는 빌드시 해당 하위 버전에 대한 PNG 비트 맵을 자동으로 생성합니다 ( Vector Asset Studio 참조 ). 지원 라이브러리를 사용하는 경우 Android는 "실제 벡터"를 API 7까지 관리합니다 (이 게시물 하단에서 업데이트에 대한 자세한 내용 참조).

위쪽을 가리키는 빨간색 삼각형은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#FF0000"
            android:pathData="m 50,0 l 50,100 -100,0 z" />
    </group>
</vector>

레이아웃에 추가하고 삼각형을 회전하면 clipChildren = "false"를 설정해야합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">

    <ImageView
        android:layout_width="130dp"
        android:layout_height="100dp"
        android:rotation="0"
        android:layout_centerInParent="true"
        android:background="@drawable/triangle"/>

</RelativeLayout>

여기에 이미지 설명을 입력하십시오

Views layout_width / layout_height 속성을 설정하여 삼각형의 크기 (너비 / 높이)를 변경하십시오. 이 방법을 사용하면 수학을 올바르게 수행하면 등변 파를 얻을 수 있습니다.

업데이트 25.11.2017

지원 라이브러리를 사용하는 경우 비트 맵 생성 대신 실제 벡터를 API 7만큼 사용할 수 있습니다 . 간단히 추가하십시오 :

vectorDrawables.useSupportLibrary = true

defaultConfig모듈의 build.gradle에서 수행하십시오 .

그런 다음 (vector xml) 드로어 블을 다음과 같이 설정하십시오.

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    app:srcCompat="@drawable/triangle" />

모든 것은 Vector Asset Studio 페이지 에 아주 잘 문서화되어 있습니다.

이 기능 이후로 나는 아이콘 측면에서 비트 맵없이 완전히 작업 해 왔습니다. 이것은 또한 APK 크기를 상당히 줄입니다.


1
링크를 게시하면 누군가가 당신을 위해 그것을 업로드 할 것입니다 :-)
GabrielOshiro

1
+1 vectorDrawables.useSupportLibrary = truecolors.xml빌드 중에 비트 맵이 생성되므로 (정의 된 색상을 사용할 수없는 경우)에 정의 된 색상을 사용할 수있는 추가 이점이 있습니다 .
Rob

39

이 경우 View를 구현하기로 결정했습니다.

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class TriangleShapeView extends View {

    public TriangleShapeView(Context context) {
        super(context);
    }

    public TriangleShapeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public TriangleShapeView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int w = getWidth() / 2;

        Path path = new Path();
        path.moveTo( w, 0);
        path.lineTo( 2 * w , 0);
        path.lineTo( 2 * w , w);
        path.lineTo( w , 0);
        path.close();

        Paint p = new Paint();
        p.setColor( Color.RED );

        canvas.drawPath(path, p);
    }
}

다음과 같이 레이아웃에서 사용하십시오.

<TriangleShapeView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff487fff">
</TriangleShapeView>

이 구현을 사용하면 다음과 같은 결과가 나타납니다.

여기에 이미지 설명을 입력하십시오


<com.your.path.to.view.TriangleShapeView ... />
근무

그거 좋네. 삼각형 색을 어떻게 바꿀 수 있습니까? 초기 색상은 회색이지만 onTouch 또는 onClick에 빨간색으로 바뀝니다.
Fshamri

이것은 xml의 핵보다 훨씬 낫습니다
dorsz

@ 피터 안녕. 조금만 개선해도 되겠습니까? 둥글게하려면 오른쪽 상단 모서리가 필요합니다. 이걸 어떻게 얻을 수 있습니까?
Barterio

1
삼각형 안에 텍스트를 어떻게 추가합니까?
Sakiboy

38

Jacek Milewski솔루션은 저에게 효과적이며 그의 솔루션에 따라 삼각형이 필요하고 역 삼각형이면 다음을 사용할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="135%" 
            android:pivotY="15%">
            <shape android:shape="rectangle">    
                <solid android:color="@color/aquamarine" />
            </shape>
        </rotate>
    </item>
</layer-list>

-1 이렇게하면 등변 삼각형을 얻을 수 없습니다. 어쨌든 많은 잠재적 인 문제가 있습니다. stackoverflow.com/questions/20805826/…
j_kubik


11

XML 사용 하지 않고 도와 드릴 까요?


간단히,

사용자 정의 레이아웃 (슬라이스) :

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.View;

public class Slice extends View {

    Paint mPaint;

    Path mPath;

    public enum Direction {
        NORTH, SOUTH, EAST, WEST
    }

    public Slice(Context context) {
        super(context);
        create();
    }

    public Slice(Context context, AttributeSet attrs) {
        super(context, attrs);
        create();
    }

    public void setColor(int color) {
        mPaint.setColor(color);
        invalidate();
    }

    private void create() {
        mPaint = new Paint();
        mPaint.setStyle(Style.FILL);
        mPaint.setColor(Color.RED);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        mPath = calculate(Direction.SOUTH);
        canvas.drawPath(mPath, mPaint);
    }

    private Path calculate(Direction direction) {
        Point p1 = new Point();
        p1.x = 0;
        p1.y = 0;

        Point p2 = null, p3 = null;

        int width = getWidth();

        if (direction == Direction.NORTH) {
            p2 = new Point(p1.x + width, p1.y);
            p3 = new Point(p1.x + (width / 2), p1.y - width);
        } else if (direction == Direction.SOUTH) {
            p2 = new Point(p1.x + width, p1.y);
            p3 = new Point(p1.x + (width / 2), p1.y + width);
        } else if (direction == Direction.EAST) {
            p2 = new Point(p1.x, p1.y + width);
            p3 = new Point(p1.x - width, p1.y + (width / 2));
        } else if (direction == Direction.WEST) {
            p2 = new Point(p1.x, p1.y + width);
            p3 = new Point(p1.x + width, p1.y + (width / 2));
        }

        Path path = new Path();
        path.moveTo(p1.x, p1.y);
        path.lineTo(p2.x, p2.y);
        path.lineTo(p3.x, p3.y);

        return path;
    }
}

귀하의 활동 (예) :

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class Layout extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Slice mySlice = new Slice(getApplicationContext());
        mySlice.setBackgroundColor(Color.WHITE);
        setContentView(mySlice, new LinearLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    }
}

작업 예 :

여기에 이미지 설명을 입력하십시오


Calculate당신이 관심이있을 수있는 또 다른 절대적으로 간단한 기능 ..

private Path Calculate(Point A, Point B, Point C) {
    Path Pencil = new Path();
    Pencil.moveTo(A.x, A.y);
    Pencil.lineTo(B.x, B.y);
    Pencil.lineTo(C.x, C.y);
    return Pencil;
}

11
+1 그렇습니다. 그리고 고마워 OP 이외에도 XML을 특별히 요구하지 않는 솔루션을 찾고있는 다른 사람들도 있습니다.
johndodo

1
onDraw는 기본이 아닌 ViewGroup에서 파생 된 클래스에서 호출되지 않습니다. setWillNotDraw (false)로 그리기를 활성화하거나 대신보기에서 상속해야합니다.
Blago

11

벡터 드로어 블 사용 :

<vector xmlns:android="http://schemas.android.com/apk/res/android"
   android:width="24dp"
   android:height="24dp"
   android:viewportWidth="24.0"
   android:viewportHeight="24.0">
   <path
        android:pathData="M0,0 L24,0 L0,24 z"
        android:strokeColor="@color/color"
        android:fillColor="@color/color"/>
</vector>

여기에 이미지 설명을 입력하십시오


사용 L하고 z결국 내 문제를 해결했습니다. 감사합니다!
11

6

직각 삼각형 화살표를 원하는 사람들을 위해 다음과 같이하십시오.

1 단계 : 드로어 블 XML 파일을 만들고 다음 XML 내용을 복사하여 드로어 블 XML에 붙여 넣습니다. (드로어 블 XML 파일에는 어떤 이름이든 사용할 수 있습니다. 제 경우에는 "v_right_arrow"라는 이름을 사용합니다)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item >
        <rotate
            android:fromDegrees="45"
            android:toDegrees="-45"
            android:pivotX="15%"
            android:pivotY="-36%" >
            <shape
                android:shape="rectangle"  >
                <stroke android:color="@android:color/transparent" android:width="1dp"/>
                <solid
                    android:color="#000000"  />
            </shape>
        </rotate>
    </item>
</layer-list>

2 단계 : 레이아웃의 XML에서보기를 만들고 배경을 1 단계 에서 방금 만든 드로어 블 XML에 바인딩합니다 . 필자의 경우 v_right_arrow를 View의 background 속성에 바인딩합니다.

<View
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:background="@drawable/v_right_arrow">
</View>

샘플 출력 :

여기에 이미지 설명을 입력하십시오

이것이 도움이되기를 바랍니다. 행운을 빕니다!


6

다음 XML을 사용하여 배경에 다음 삼각형을 추가 할 수 있습니다

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#848af8"
            android:pathData="M 0,20 L 0,0 L 100,0 L 100,20 L 54,55  l -1,0.6  l -1,0.4  l -1,0.2  l -1,0   l -1,-0  l -1,-0.2  l -1,-0.4  l -1,-0.6    L 46,55   L 0,20 -100,-100 Z" />
    </group>
</vector>

xml 디자인을 사용자 정의하는 전체 논리는입니다 pathData. 왼쪽 상단을 (0,0)으로 고려하고 요구 사항에 따라 레이아웃을 디자인하십시오. 답변을 확인하십시오 .


4
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%" >
            <shape
                android:shape="rectangle" >
                <stroke android:color="@android:color/transparent" android:width="0dp"/>
                <solid
                    android:color="#fff" />
            </shape>
        </rotate>
    </item>
</layer-list>

4
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <rotate
                android:fromDegrees="45"
                android:pivotX="135%"
                android:pivotY="1%"
                android:toDegrees="45">
                <shape android:shape="rectangle">
                    <stroke
                        android:width="-60dp"
                        android:color="@android:color/transparent" />
                    <solid android:color="@color/orange" />
                </shape>
            </rotate>
        </item>
    </layer-list>

3

나는 이것을 한 적이 없지만 내가 이해 한 것에서 PathShape 클래스를 사용할 수 있습니다 : http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html


2
XML에서 경로 모양을 사용하는 방법은 무엇입니까?
Sebastian Roth

이것은 사용하기에 적합한 부분을 찾는 데 도움이되었지만 사용 방법에 대한 충분한 설명을 제공하지는 않습니다. 어쨌든 고마워.
Navarr

죄송합니다 Sebastian and Navarr ... 나는 그것을 사용한 적이 없다고 대답 했으므로 사용 방법을 잘 모르겠습니다. 이것은 일을 끝내는 수업처럼 보입니다. 문서가 충분하지 않다는 데 동의합니다.
Justin

3
PathShape에 연결된 XML 구문이없는 것 같습니다. XML 모양 태그는 사각형, 타원형, 선 및 링만 지원합니다. developer.android.com/guide/topics/resources/…
Nilzor

3

나는 파티에 늦었고 같은 문제를 겪었고 Google은 첫 번째 결과 로이 StackOverflow 스레드를 지적했습니다.

xml 방법을 사용하여 삼각형을 추가하고 xml 접근법을 통한 삼각형 모양이 표시된 것보다 더 많은 공간을 차지한다는 문제를 발견했습니다.

레이아웃 경계가 설정된 스크린 샷보기

여기에 이미지 설명을 입력하십시오

그래서 다음과 같은 유형의 삼각형을 그릴 수있는이 사용자 정의보기 클래스를 만들었습니다.

  1. 가리키는
  2. 아래쪽을 가리키는
  3. 왼쪽을 가리키는 &
  4. 오른쪽 포인팅

아사

package com.hiteshsahu.materialupvotewidget;    
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.View;

public class TriangleShapeView extends View {

    private int colorCode = Color.DKGRAY;

    public int getColorCode() {
        return colorCode;
    }

    public void setColorCode(int colorCode) {
        this.colorCode = colorCode;
    }

    public TriangleShapeView(Context context) {
        super(context);
        if (isInEditMode())
            return;
    }

    public TriangleShapeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (isInEditMode())
            return;
    }

    public TriangleShapeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        if (isInEditMode())
            return;
    }


    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int w = getWidth() / 2;
        int h = getHeight() / 2;

        //Choose what type of triangle you want here
        Path path = getLeftTriangle(w, h);

        path.close();
        Paint p = new Paint();
        p.setColor(colorCode);
        p.setAntiAlias(true);

        canvas.drawPath(path, p);
    }

    @NonNull
    /**
     * Return Path for down facing triangle
     */
    private Path getInvertedTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(w, 2 * h);
        path.lineTo(2 * w, 0);
        path.lineTo(0, 0);
        return path;
    }

    @NonNull
    /**
     * Return Path for Up facing triangle
     */
    private Path getUpTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 2 * h);
        path.lineTo(w, 0);
        path.lineTo(2 * w, 2 * h);
        path.lineTo(0, 2 * h);
        return path;
    }

    @NonNull
    /**
     * Return Path for Right pointing triangle
     */
    private Path getRightTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(2 * w, h);
        path.lineTo(0, 2 * h);
        path.lineTo(0, 0);
        return path;
    }

    @NonNull
    /**
     * Return Path for Left pointing triangle
     */
    private Path getLeftTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(2 * w, 0);
        path.lineTo(0, h);
        path.lineTo(2 * w, 2 * h);
        path.lineTo(2 * w, 0);
        return path;
    }
}

다음과 같이 XML 레이아웃으로 간단히 사용할 수 있습니다.

 <com.hiteshsahu.materialupvote.TriangleShapeView
            android:layout_width="50dp"
            android:layout_height="50dp"></com.hiteshsahu.materialupvote.TriangleShapeView>

OP가 xml 솔루션의 솔루션을 원하지만 xml 접근법에 문제가 있음을 알았습니다. 누군가에게 도움이되기를 바랍니다.


2

Jacek Milewski 의 솔루션을 사용하여 투명한 배경으로 아래쪽을 향하게했습니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:fromDegrees="135"
            android:pivotX="65%"
            android:pivotY="20%"
            android:toDegrees="135"
            >
            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="@color/blue"
                    />
                <solid android:color="@color/transparent" />
            </shape>
        </rotate>
    </item>
</layer-list>

각도를 변경 android:pivotX하고 android:pivotY이동할 수 있습니다 .

용법:

<ImageView
    android:layout_width="10dp"
    android:layout_height="10dp"
    android:src="@drawable/ic_angle_down"
    />

여기에 이미지 설명을 입력하십시오

매개 변수는 이미지의 크기에 따라 다릅니다. 예를 들어, ImageView크기가 100dp * 80dp 인 경우 다음 상수를 사용해야합니다.

<rotate
    android:fromDegrees="135"
    android:pivotX="64.5%"
    android:pivotY="19%"
    android:toDegrees="135"
    >

여기에 이미지 설명을 입력하십시오


2

안드로이드 네비게이션 바의 뒤로 버튼과 같은 삼각형 이미지를 만들려고하는데 해결책을 찾지 못했습니다.

이제 솔루션을 나와 함께 공유하고 싶습니다.

삼각형 네비게이션 바 안드로이드

아래 xml을 사용하십시오.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:bottom="20dp"
    android:left="480dp"
    android:right="60dp"
    android:top="20dp">
    <shape>
        <size android:width="60dp" />
        <corners android:radius="80dp"/>
        <solid android:color="#AAA" />
    </shape>
</item>
<item
    android:bottom="480dp"
    android:right="70dp"
    android:top="20dp">
    <rotate
        android:fromDegrees="-28"
        android:pivotX="96%"
        android:pivotY="50%"
        android:toDegrees="-20">
        <shape>
            <corners android:radius="80dp"/>
            <size android:height="60dp" />
            <solid android:color="#AAA" />
        </shape>
    </rotate>
</item>

<item
    android:bottom="20dp"
    android:right="70dp"
    android:top="480dp">
    <rotate
        android:fromDegrees="28"
        android:pivotX="96%"
        android:pivotY="50%"
        android:toDegrees="-20">
        <shape>
            <corners android:radius="80dp"/>
            <size android:height="60dp" />
            <solid android:color="#AAA" />
        </shape>
    </rotate>
</item>


0
  <LinearLayout
        android:id="@+id/ly_fill_color_shape"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_gravity="center"
        android:background="@drawable/shape_triangle"
        android:gravity="center"
        android:orientation="horizontal" >
    </LinearLayout>

<item>
    <rotate
        android:fromDegrees="45"
        android:pivotX="-15%"
        android:pivotY="77%"
        android:toDegrees="45" >
        <shape android:shape="rectangle" >
            <stroke
                android:width="2dp"
                android:color="@color/black_color" />

            <solid android:color="@color/white" />

            <padding android:left="1dp" />
        </shape>
    </rotate>
</item>
<item android:top="200dp">
    <shape android:shape="line" >
        <stroke
            android:width="1dp"
            android:color="@color/black_color" />

        <solid android:color="@color/white" /> 
    </shape>
</item>


-1 이렇게하면 등변 삼각형을 얻을 수 없습니다. 어쨌든 많은 잠재적 인 문제가 있습니다. stackoverflow.com/questions/20805826/…
j_kubik

0

Google은 여기 에서 등변 삼각형을 제공합니다 .
크기가 유연하도록 VectorDrawable을 선택하십시오.
플러그인으로 Android Studio에 통합되었습니다.

SVG 이미지가 있다면 이것을 사용할 수 있습니다 너무 VectorDrawable로 변환 할 수 있습니다.

VectorDrawable이 있으면 다른 사람들이 언급 한 것처럼 색상과 회전을 쉽게 변경할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.