android可定制布局形状

android可定制布局形状,android,layout,shape,viewgroup,Android,Layout,Shape,Viewgroup,我正在尝试创建自定义视图组布局形状,布局可以是星形或心形、三角形,甚至是对角线 因此,目标是为两个或多个ImageView创建拼贴视图。 有人能给我一个库或一种方法来做这个把戏吗?你可以通过使用标准的Canvas和BitmapShader来实现这一点 第一种方法可以如下所示: @Override protected void onDraw(Canvas canvas) { //bitmap 01 canvas.save(Canvas.CLIP_SAVE_FLAG);

我正在尝试创建自定义视图组布局形状,布局可以是星形或心形、三角形,甚至是对角线

因此,目标是为两个或多个ImageView创建拼贴视图。


有人能给我一个库或一种方法来做这个把戏吗?

你可以通过使用标准的
Canvas
BitmapShader
来实现这一点

第一种方法可以如下所示:

@Override protected void onDraw(Canvas canvas) {
    //bitmap 01
    canvas.save(Canvas.CLIP_SAVE_FLAG);
    canvas.clipPath(shape01);
    canvas.drawBitmap(bitmap01, 0, 0, paint);
    canvas.restore();

    //bitmap 02
    canvas.save(Canvas.CLIP_SAVE_FLAG);
    canvas.clipPath(shape02);
    canvas.drawBitmap(bitmap02, 0, 0, paint);
    canvas.restore();
}
BitmapShader shader01 = new BitmapShader(bitmap01, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
BitmapShader shader02 = new BitmapShader(bitmap02, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint paint01 = new Paint();
Paint paint02 = new Paint();
paint01.setShader(shader01);
paint02.setShader(shader02);

@Override protected void onDraw(Canvas canvas) {
    //bitmap 01
    canvas.drawPath(path01, paint01);

    //bitmap 02
    canvas.drawPath(path02, paint02);
}
第二种可能是这样的:

@Override protected void onDraw(Canvas canvas) {
    //bitmap 01
    canvas.save(Canvas.CLIP_SAVE_FLAG);
    canvas.clipPath(shape01);
    canvas.drawBitmap(bitmap01, 0, 0, paint);
    canvas.restore();

    //bitmap 02
    canvas.save(Canvas.CLIP_SAVE_FLAG);
    canvas.clipPath(shape02);
    canvas.drawBitmap(bitmap02, 0, 0, paint);
    canvas.restore();
}
BitmapShader shader01 = new BitmapShader(bitmap01, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
BitmapShader shader02 = new BitmapShader(bitmap02, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint paint01 = new Paint();
Paint paint02 = new Paint();
paint01.setShader(shader01);
paint02.setShader(shader02);

@Override protected void onDraw(Canvas canvas) {
    //bitmap 01
    canvas.drawPath(path01, paint01);

    //bitmap 02
    canvas.drawPath(path02, paint02);
}

因此,您需要定义形状、加载位图并绘制它们。

使用“ImageView”并不是一个简单的方法,您可以选择使用画布。我不想将此应用于ImageView,我想对视图组进行此操作。@MarwanZakariya如果实现它,您是否能够获得ans