2016-05-18 2 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:

шестигранной формы как вектор Drawable:

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

Update (28: 07.2016):

Для поддержки API ниже Lollipop библиотеки использование поддержки http://android-developers.blogspot.com/2016/02/android-support-library-232.html не использовать VectorDrawableCompat вместо VectorDrawable

+0

он показывает неожиданный конец файла после /> – suraj

+0

Что-то не так с форматированием stackoverflow и. Я починил это. – koliczyna

+0

да, это работает. можете ли вы поделиться тем, какой инструмент вы используете. для создания этого формата – suraj

1

Хотя большинство решений будет включать в себя в том числе ShapeImageView (что большая библиотека, кстати), вы всегда можете написать собственную логику для создания пользовательского шестиугольник формы макета.

Все, что вам нужно сделать, это определить свойства объекта Path, а затем использовать его в методе OnDraw() макета с использованием Canvas.

Так вы можете создать путь шестиугольника.

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

После того, как у вас есть пользовательский макет готов, вы можете установить фон макета в любой Drawable вы хотите (так же, как вы могли бы сделать для любых других макетов).

Смежные вопросы