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

时间:2016-05-18 10:26:49

标签: android android-layout

我想为我的项目创建Hexagon形状,所以我想以.xml格式创建该形状,以便我如何创建。

like this image

like this image

4 个答案:

答案 0 :(得分:13)

最适合您的解决方案是使用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>

更新(28:07.2016):

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

答案 1 :(得分: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)
}

准备好自定义布局后,您可以将布局的背景设置为您想要的任何可绘制(就像对任何其他布局一样)。

答案 2 :(得分:1)

if you want output like this 如果想要完整的六角形

<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>

答案 3 :(得分:0)

您可以使用VectorDrawable(旧版本的VectorDrawableCompat)https://developer.android.com/studio/write/vector-asset-studio.html。您可以从.svg文件中轻松导入形状。