2017-05-23 10 views
0

をロードした後ImageViewのための色合いの色を設定する方法:https://github.com/bumptech/glide/tree/master/samples/svg/src/main/java/com/bumptech/glide/samples/svgは、Android - グライド4.0.0-RC0:成功した私は、このサンプルに続くSVG

に成功グライド4.0.0-RC0でSVGファイルをロードした後に、私は設定したいです色合いのImageViewのための色が、setColorFilter

私の元に動作していない:私の元には

package com.example.quangson.glidesvg; 

import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; 

import android.content.ContentResolver; 
import android.graphics.PorterDuff; 
import android.graphics.drawable.PictureDrawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ImageView; 
import com.bumptech.glide.RequestBuilder; 
import com.example.quangson.glidesvg.glide.GlideApp; 
import com.example.quangson.glidesvg.glide.SvgSoftwareLayerSetter; 

public class MainActivity extends AppCompatActivity { 

    private static final String TAG = "SVGActivity"; 
    private ImageView imageViewSVG; 
    private ImageView imageViewPNG; 
    private RequestBuilder<PictureDrawable> requestBuilder; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imageViewSVG = (ImageView) findViewById(R.id.svg_image_view1); 
     imageViewPNG = (ImageView) findViewById(R.id.svg_image_view2); 

     imageViewPNG.setImageResource(R.drawable.image_mylogo); 

     requestBuilder = GlideApp.with(this) 
       .as(PictureDrawable.class) 
       .error(R.drawable.image_error) 
       .transition(withCrossFade()) 
       .listener(new SvgSoftwareLayerSetter()); 
     Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.raw.android_toy_h); 
     requestBuilder.load(uri).into(imageViewSVG); 

     imageViewSVG.setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.SRC_IN); 
     imageViewPNG.setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.SRC_IN); 
    } 
} 

を私はから(PNG画像をロードimageViewPNG⇒WORKING

ためimageViewPNGとsetColorFilterへのres /描画可能)私は正常に(ロードSVGファイルを動作していないが、setColorFilterできない⇒imageViewSVGためimageViewSVGとsetColorFilterに生のres /からSVG画像を()ロード)

imageViewSVGの色合いを設定してください。


私はBitmapDrawableを(その後setColorFilterます)を生成SvgDrawableTranscoderを作ることにコードの下のような編集を試してみましたが、それは働いていない、私を助けて?

package com.sonzero.chibiz.glide; 

import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Picture; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.graphics.drawable.PictureDrawable; 

import com.bumptech.glide.load.engine.Resource; 
import com.bumptech.glide.load.resource.SimpleResource; 
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; 
import com.caverock.androidsvg.SVG; 

/** 
* Convert the {@link SVG}'s internal representation to an Android-compatible one 
* ({@link Picture}). 
*/ 
public class SvgDrawableTranscoder implements ResourceTranscoder<SVG, BitmapDrawable> { 
    @Override 
    public Resource<BitmapDrawable> transcode(Resource<SVG> toTranscode) { 
     SVG svg = toTranscode.get(); 
     Picture picture = svg.renderToPicture(); 
     PictureDrawable drawable = new PictureDrawable(picture); 
     Bitmap bitmap = asBitmap(drawable); 
     BitmapDrawable mDrawable = new BitmapDrawable(bitmap); 
     return new SimpleResource<BitmapDrawable>(mDrawable); 
    } 

    public Bitmap asBitmap(PictureDrawable pd) { 
     Bitmap bitmap = Bitmap.createBitmap(pd.getIntrinsicWidth(),pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     canvas.drawPicture(pd.getPicture()); 
     return bitmap; 
    } 
} 

おかげ

+0

は[実装されていません](https://github.com/bumptech/glide/search?utf8=%E2%9C%93&q=setColorFilter&type=)のように見えますが、githubで問題が発生します。 –

+0

SVGではなく、DrawableまたはGifDrawableをサポートしています。助けてください – Sonzero

+0

どうすればいいですか?このライブラリを引き続き使用するには、これを実装する人が必要です。おそらく自分でやるか、他人に支払う必要があります。 –

答えて

0

グライドSVGローダーがPictureDrawableを生成します。最後に確認したところ、PictureDrawablesはsetColorFilter()メソッドをサポートしていません。

SvgDrawableTranscoderの独自のバージョンを作成して、代わりにBitmapDrawableを生成し、AndroidSVGのrenderToCanvas()メソッドを使用してそれに描画します。

+0

私は以下のコードのように編集しようとしましたが、機能しません。 – Sonzero

+0

パブリッククラスSvgDrawableTranscoderはResourceTranscoderを { @Overrideパブリックリソーストランスコード(リソース toTranscode){ SVG SVG = toTranscode.get()を実装します。 画像の画像= svg.renderToPicture(); PictureDrawable drawable =新しいPictureDrawable(画像); ビットマップビットマップ= asBitmap(描画可能); BitmapDrawable mDrawable =新しいBitmapDrawable(ビットマップ)。 新しいSimpleResource (mDrawable)を返します。 } } – Sonzero

+0

パブリックビットマップasBitmap(PictureDrawable pd){ ビットマップbitmap = Bitmap.createBitmap(pd.getIntrinsicWidth()、pd.getIntrinsicHeight()、Bitmap.Config.ARGB_8888); キャンバスキャンバス=新しいキャンバス(ビットマップ); canvas.drawPicture(pd.getPicture()); 戻りビットマップ。 } – Sonzero

関連する問題