[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:tint
및android: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>