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

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>

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

감사



답변

이 게시물 에서는 를 수행하는 방법에 대해 설명합니다. 다음은 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%" >


답변

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

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


답변

이렇게 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>

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


답변

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

최소 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 크기를 상당히 줄입니다.


답변

이 경우 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>

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

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


답변

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>


답변

: 여기에 대답을 참조하십시오
사용자 정의 화살표를 이미지없이 안드로이드를

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="32dp"
        android:height="24dp"
        android:viewportWidth="32.0"
        android:viewportHeight="24.0">
    <path android:fillColor="#e4e4e8"
          android:pathData="M0 0 h32 l-16 24 Z"/>
</vector>

화살