2017-01-02 63 views

回答

0

您可以使用子佈局的這個六邊形的ImageView和調整頁邊距

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PorterDuff; 
import android.graphics.Region; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class HexagonMaskView extends ImageView { 
    private Path hexagonPath; 
    private Path hexagonBorderPath; 
    private Paint mBorderPaint; 

    public HexagonMaskView(Context context) { 
     super(context); 
     init(); 
    } 

    public HexagonMaskView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public HexagonMaskView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     this.hexagonPath = new Path(); 
     this.hexagonBorderPath = new Path(); 

     this.mBorderPaint = new Paint(); 
     this.mBorderPaint.setColor(Color.WHITE); 
     this.mBorderPaint.setStrokeCap(Paint.Cap.ROUND); 
     this.mBorderPaint.setStrokeWidth(50f); 
     this.mBorderPaint.setStyle(Paint.Style.STROKE); 
    } 

    public void setRadius(float radius) { 
     calculatePath(radius); 
    } 

    public void setBorderColor(int color) { 
     this.mBorderPaint.setColor(color); 
     invalidate(); 
    } 

    private void calculatePath(float radius) { 
     float halfRadius = radius/2f; 
     float triangleHeight = (float) (Math.sqrt(3.0) * halfRadius); 
     float centerX = getMeasuredWidth()/2f; 
     float centerY = getMeasuredHeight()/2f; 

     this.hexagonPath.reset(); 
     this.hexagonPath.moveTo(centerX, centerY + radius); 
     this.hexagonPath.lineTo(centerX - triangleHeight, centerY + halfRadius); 
     this.hexagonPath.lineTo(centerX - triangleHeight, centerY - halfRadius); 
     this.hexagonPath.lineTo(centerX, centerY - radius); 
     this.hexagonPath.lineTo(centerX + triangleHeight, centerY - halfRadius); 
     this.hexagonPath.lineTo(centerX + triangleHeight, centerY + halfRadius); 
     this.hexagonPath.close(); 

     float radiusBorder = radius - 5f; 
     float halfRadiusBorder = radiusBorder/2f; 
     float triangleBorderHeight = (float) (Math.sqrt(3.0) * halfRadiusBorder); 

     this.hexagonBorderPath.reset(); 
     this.hexagonBorderPath.moveTo(centerX, centerY + radiusBorder); 
     this.hexagonBorderPath.lineTo(centerX - triangleBorderHeight, centerY + halfRadiusBorder); 
     this.hexagonBorderPath.lineTo(centerX - triangleBorderHeight, centerY - halfRadiusBorder); 
     this.hexagonBorderPath.lineTo(centerX, centerY - radiusBorder); 
     this.hexagonBorderPath.lineTo(centerX + triangleBorderHeight, centerY - halfRadiusBorder); 
     this.hexagonBorderPath.lineTo(centerX + triangleBorderHeight, centerY + halfRadiusBorder); 
     this.hexagonBorderPath.close(); 
     invalidate(); 
    } 

    @Override 
    public void onDraw(Canvas c) { 
     c.drawPath(hexagonBorderPath, mBorderPaint); 
     c.clipPath(hexagonPath, Region.Op.INTERSECT); 
     c.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
     super.onDraw(c); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
     int height = MeasureSpec.getSize(heightMeasureSpec); 
     setMeasuredDimension(width, height); 
     calculatePath(Math.min(width/2f, height/2f) - 10f); 
    } 
} 

在XML

<YourpakageName.HexagonMaskView 
    android:id="@+id/image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:src="@drawable/bear" 
    android:background="@android:color/holo_green_light"/> 

希望這有助於

+2

本作的ImageView http://stackoverflow.com/questions/22601400/how-to-give-hexagon-shape-to-imageview –

+1

雅他可以使用列表子認爲圖像視圖,並添加一些邊際(正面和負面)基於偶數位置 – Redman

+0

我明白。但用戶提問'如何創建六角形列表視圖' –

0

嘿使用矢量圖像爲: -

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

希望這help.Happy編碼。