我正在尝试为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"/>

最佳答案

啊愚蠢的错字。为位图着色器寻找错误的位图

shaders[0] = new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

10-07 13:02
查看更多