如何在.xml格式中创建六边形形状

10

我想在我的项目中创建六边形形状,因此我想以 .xml 格式创建该形状,请问如何创建。

像这张图片

像这张图片


你想在“图像视图”中使用作为背景吗?或者是其他用途? - Jay Rathod
是的,我想在ImageView的背景中使用。所以我希望这个形状使用.xml格式。 - suraj
https://dev59.com/yGEh5IYBdhLWcg3wRRqh#22987264 - Tejas
我想要以 .xml 格式,用于 ImageView 的背景。 - suraj
1
你可以创建自己的六边形形状...请查看我的教程 - Iamat8
4个回答

17

对于您来说最好的解决方案是使用VectorDrawable:

六边形形状作为矢量图:

<vector android:height="24dp" android:viewportHeight="628.0"
android:viewportWidth="726.0" android:width="27dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#00ffffff"
    android:pathData="m723,314c-60,103.9 -120,207.8 -180,311.8 -120,0 -240,0 -360,0C123,521.8 63,417.9 3,314 63,210.1 123,106.2 183,2.2c120,0 240,0 360,0C603,106.2 663,210.1 723,314Z"
    android:strokeColor="#000000" android:strokeWidth="4"/>
</vector>

更新(2016年07月28日):

要支持Lollipop以下版本的API,请使用支持库http://android-developers.blogspot.com/2016/02/android-support-library-232.html,记得使用VectorDrawableCompat而不是VectorDrawable。


Stackoverflow的格式有问题,</vector>标签被切掉了。我已经修复了它。 - koliczyna
是的,它正在工作。你能分享一下你使用的工具吗?用来制作这种格式的工具。 - suraj
点击鼠标右键进入drawable文件夹 -> 新建 -> 矢量资产 -> 本地SVG文件 -> 下一步。我使用Inkscape生成SVG,但您也可以从网络上下载。 - koliczyna
值得一提的是,此功能从API 21(Android 5)开始支持。 - Marius P.
不,它通过支持库支持早期版本 - 更多细节请参见:http://android-developers.blogspot.com/2016/02/android-support-library-232.html - koliczyna
如何创建肖像六边形 - Deepak Pandit

3

如果您想要类似这样的输出 如果您想要完整的六边形

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">

<path
    android:fillColor="#000000"
    android:pathData="m485.291,129.408 l-224,-128c-3.285,-1.877 -7.296,-1.877 
-10.581,0l-224,128c-3.328,1.899 -5.376,5.44 -5.376,9.259v234.667c0,3.819 2.048,7.36 
5.376,9.259l224,128c1.643,0.939 3.456,1.408 5.291,1.408s3.648,-0.469 
5.291,-1.408l224,-128c3.328,-1.899 5.376,-5.44 5.376,-9.259v-234.667c-0.001,-3.819 
-2.049,-7.36 -5.377,-9.259z" />

</vector>

1

大多数解决方案都会涉及包含 ShapeImageView(顺便说一下,这是一个很棒的库),但你也可以编写自己的逻辑来创建自定义的六边形布局。

你只需要定义Path对象的属性,然后在使用Canvas的onDraw()方法中将其用于布局即可。

以下是创建六边形路径的方法。

  float midx = getWidth() / 2;
  float midy = getHeight() / 2;

  Path p = new Path();

  p.moveTo(midx, midy);
  p.lineTo(midx+150, midy + 220);
  p.lineTo(midx, midy + 220);
  p.lineTo(midx-150, midy + 220);
  p.lineTo(midx-300, midy);
  p.lineTo(midx-150, midy-220);
  p.lineTo(midx+150, midy-220);
  p.lineTo(midx+300, midy);
  p.lineTo(midx+150, midy + 220);
  return p;

现在,在您的自定义六边形布局中,在onDraw()中使用此路径。
@Override
 protected void onDraw(Canvas canvas) {
      Path clipPath = new Path();
      clipPath.addPath(p); //p is the path you created above
      canvas.clipPath(clipPath);
      canvas.drawColor(Color.RED); //optional

      super.onDraw(canvas)
}

一旦您准备好自定义布局,您可以像为任何其他布局设置背景一样将布局的背景设置为任何可绘制对象。

这是非常有用的信息,对于我想要创建的图像创作者来说。 - user9599745
1
很高兴能够帮忙! :) - Swayam

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接