如何在android中使用XML形状创建一个正确的箭头(雪佛龙)?

如何在android中使用xml形状创建一个正确的箭头? 在此处输入图像描述

我遇到过类似的问题。 这是我解决它的方式:

                        

第一个项目是一个空的形状,以扩展drawable。 然后,我使用了2个矩形。 每个都有两个圆形的边。

您需要通过ImageView使用此drawable:

  

这是结果:

箭头示例

注意: AndroidStudio不会渲染不同的边角尺寸,但会在设备上正确显示。

这样有一个标准的材料设计箭头。

在Android Studio中,单击File – > New – > Vector Asset ,然后单击图标(带有Android徽标的按钮)并搜索“箭头”。

选择所需的箭头,它将添加到您的项目中。 您可以打开XML文件并根据需要编辑尺寸和颜色。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

仅使用可绘制的xml创建此类形状是不可能的 ( 请参阅user3249477的回答 ),如果要以编程方式创建此类形状,请创建自定义可绘制或视图。 这里是右侧箭头形状的代码。 (颜色和直径可以使用样式配置为xml)

 package com.kiriyard.stackoverflow24723040.views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Path.Direction; import android.util.AttributeSet; import android.view.View; public class ArrowView extends View { private Paint arrowPaint; private Path arrowPath; private int arrowColor = 0xFF888888; private float density; private int diameter = 25, diameter_calc, radius_calc; public ArrowView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); stuff(); } public ArrowView(Context context, AttributeSet attrs) { super(context, attrs); stuff(); } public ArrowView(Context context) { super(context); stuff(); } private void stuff() { //Getting density "dp" density = getContext().getResources().getDisplayMetrics().scaledDensity; //Calculating actual diameter diameter_calc = (int) density * diameter; radius_calc = diameter/2; //Creating paint arrowPaint = new Paint(); arrowPaint.setAntiAlias(true); arrowPaint.setColor(arrowColor); //Initialize path arrowPath = new Path(); this.setWillNotDraw(false); } private int startX,startY, currentX, currentY; protected void onDraw(Canvas c) { startX = c.getWidth(); startY = c.getHeight()/2; c.rotate(-45, startX, startY); arrowPath.reset(); currentX = startX; currentY = startY; //Move to right end side center of the canvas arrowPath.moveTo(currentX,currentY); //Lets move up currentY = radius_calc; arrowPath.lineTo(currentX, currentY); //Now draw circle currentX-=radius_calc; arrowPath.addCircle(currentX, radius_calc, radius_calc, Direction.CCW); currentX-=radius_calc; arrowPath.lineTo(currentX,currentY); // Go to inner side center point currentX = startX - diameter_calc; currentY = startY - diameter_calc; arrowPath.lineTo(currentX,currentY); // Go left currentX = startX - startY + radius_calc; arrowPath.lineTo(currentX, currentY); //Draw circle currentY+=radius_calc; c.drawCircle(currentX, currentY, radius_calc, arrowPaint); currentY+=radius_calc; arrowPath.lineTo(currentX, currentY); //Go to start arrowPath.lineTo(startX, startY); c.drawPath(arrowPath, arrowPaint); } } 

截图

箭头截图

所以这是其中之一! ……可绘制的图像更容易。

使用你的幻想和以下答案,你将达到你的目标;)

Android如何以编程方式创建三角形和矩形形状?