2

我正在尝试为 Android 库 Picasso 创建一个“转换”。这个问题(我认为)虽然对于 ComposeShaders 的工作方式更为普遍。

我正在尝试使用位图着色器在图像顶部实现直接的垂直线性渐变。这是代码:

@Override
public Bitmap transform(Bitmap source) {

    Bitmap bitmap = Bitmap.createBitmap(source.getWidth(),
                                        source.getHeight(),
                                        source.getConfig());

    shaders[0] = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    shaders[1] = new LinearGradient(0,
                                    0,
                                    0,
                                    source.getHeight(),
                                    Color.BLACK,
                                    Color.TRANSPARENT,
                                    Shader.TileMode.CLAMP);
    ComposeShader composeShader = new ComposeShader(shaders[0],
                                                    shaders[1],
                                                    PorterDuff.Mode.DST_IN);

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(composeShader);

    Canvas canvas = new Canvas(bitmap);
    canvas.drawPaint(paint);

    source.recycle();
    return bitmap;
}

运行转换时,我得到了很好的垂直渐变,但根本看不到位图。所以我基本上只得到一个垂直渐变。帮助?

其他相关代码:

    Picasso.with(getActivity())
           .load(myValidUrl)
           .transform(new TopVignetteTransformation())
           .into(myImageview);


<ImageView
    android:background="@color/dark_gray"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"
    android:layout_height="match_parent"
    android:layout_width="match_parent"/>
4

1 回答 1

1

啊。愚蠢的错字。为位图着色器提供错误的位图

shaders[0] = new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
于 2014-04-16T08:26:53.937 回答