2017-05-23 18 views
0

를로드 한 후 이미지 뷰에 대한 색조 색상을 설정하는 방법 : https://github.com/bumptech/glide/tree/master/samples/svg/src/main/java/com/bumptech/glide/samples/svg안드로이드 - 글라이드 4.0.0-RC0 성공적으로 내가이 샘플 다음 SVG

성공적으로 글라이드 4.0.0-RC0와 SVG 파일을로드 한 후를, 내가 설정하려면 색조 이미지 뷰의 색상,하지만 setColorFilter 작동하지

내 소스

: 나는에서 (PNG 이미지를로드

: 내 소스에서

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); 
    } 
} 

imageViewPNG ⇒ WORKING

에 대한 imageViewPNG 및 setColorFilter로)/당김 입술 나는 성공적으로 (로드 SVG 파일을 작동하지 ⇒ imageViewSVG에 대한 imageViewSVG에 고해상도/원시) 및 setColorFilter에서 (SVG 이미지를로드 할 수 있지만하지 setColorFilter)

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 (그림); 비트 맵 bitmap = 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