2014-04-16 72 views
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; 
} 

當運行tranformation時,我得到了很好的垂直漸變,但是根本沒有看到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"/> 
+0

有趣。你可以在庫中提交一個錯誤並指向這個URL嗎?我會看看。 – dnkoutso

+0

謝謝@dnkoutso。完成。 –

+0

我來看看。 – dnkoutso

回答

1

Arrgh。愚蠢的錯字。爲位圖着色器提供錯誤的位圖

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

不錯。我強烈建議你使用'ThreadLocal'' Paint'和其他分配來避免它們。 – dnkoutso