如何在Android中裁剪六边形、八角形和圆形的图像?

如何在Android中裁剪六边形、八角形和圆形的图像?,android,crop,geometry,shape,Android,Crop,Geometry,Shape,我想裁剪六边形、八角形和圆形形状。我使用了自定义图像视图类,并在xml中用于显示图像。它适用于不同的形状 现在我需要在下一个活动中以用户选择的形状裁剪图像。我在下一个活动中获得图像 我试过这个例子: 但是图像的形状不合适,只有部分图像被遮住了 我如何才能做到这一点?阅读Romain Guy关于如何制作圆角图像的文章。使用此技术,您可以创建各种形状 这是怎么回事 如果您有预定义数量的形状,我建议您使用由定义的一些形状创建一个类。现在,每当用户要求在ImageView上使用不同的形状时,您就创建一个

我想裁剪六边形、八角形和圆形形状。我使用了自定义图像视图类,并在xml中用于显示图像。它适用于不同的形状

现在我需要在下一个活动中以用户选择的形状裁剪图像。我在下一个活动中获得图像

我试过这个例子: 但是图像的形状不合适,只有部分图像被遮住了

我如何才能做到这一点?

阅读Romain Guy关于如何制作圆角图像的文章。使用此技术,您可以创建各种形状

这是怎么回事

如果您有预定义数量的形状,我建议您使用由定义的一些形状创建一个类。现在,每当用户要求在ImageView上使用不同的形状时,您就创建一个位图,并从该类返回一个位图,然后将其放在ImageView上

例如,八角形是这样的:

public static Bitmap drawOctagonShapedBitmap(Bitmap src) {

    Bitmap dst =  Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
    //Create an output as big as the actual bitmap.
    Path octagon = null; //Create an octagon shape, it should be big enough to crop enough of the bitmap.
    Canvas canvas = new Canvas(dst);
    Paint mPaint = new Paint();

    BitmapShader mBitmapShader = new BitmapShader(src, Shader.TileMode.CLAMP,
            Shader.TileMode.CLAMP);
    mPaint.setAntiAlias(true);
    mPaint.setShader(mBitmapShader);

    canvas.drawPath(octagon, mPaint);

    return dst;
}

你在找这样的风景吗?我使用了这个..但它只能以不同的形状显示图像。我需要以用户选择的形状裁剪图像。路径八角形为空。我的应用程序崩溃要替换什么