2016-05-18 45 views
5

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

like this image

like this image

+0

想要在'Image View'背景中使用吗?或任何其他目的。 –

+0

是的,我想在ImageView背景中使用。所以我想要.xml格式的这个形状 – suraj

+0

http://stackoverflow.com/a/22987264/1992254 – Tejas

回答

9

最适合你的解决办法是使用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):

支持以下棒棒糖使用支持库API http://android-developers.blogspot.com/2016/02/android-support-library-232.html记得用VectorDrawableCompat代替VectorDrawable

+0

它显示意外的文件结尾/> – suraj

+0

stackoverflow格式有问题,标签被切断。我修好了它。 – koliczyna

+0

是的,它的工作。你能分享你使用的工具吗?制作此格式 – suraj

1

虽然大多数的解决方案将涉及包括ShapeImageView(这是一个伟大的图书馆,顺便说一句),你总是可以编写自己的逻辑来创建一个自定义的六边形布局。

您只需定义对象的属性,然后在使用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) 
} 

一旦你有你的自定义布局准备好了,你可以布局的背景设置为你想要的任何绘制(就像你对任何其他布局做)。