2017-07-19 87 views
1

我用下面的代码中使用滑行圆角加载图像到ImageView的:滑翔圆角变换问题

Glide.with(this) 
       .load(url) 
       .listener(new RequestListener<Drawable>() { 
        @Override 
        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { 
         return false; 
        } 
        @Override 
        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { 
         return false; 
        } 
       }) 
       .transition(withCrossFade()) 
       .apply(new RequestOptions().transform(new RoundedCorners(50)).error(R.drawable.default_person).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)) 
       .into(mBinding.profileImgv); 

enter image description here 图像得到的像素化的某些原因。有人可以告诉我问题在哪里吗?

+0

嗨,你解决这个问题?我也有同样的问题。 – David

回答

0
Glide.with(context).load(url).centerCrop().into(new BitmapImageViewTarget(imageView) { 
     @Override 
     protected void setResource(Bitmap resource) { 
      RoundedBitmapDrawable circularBitmapDrawable = 
        RoundedBitmapDrawableFactory.create(context.getResources(), resource); 
      circularBitmapDrawable.setCircular(true); 
      imageView.setImageDrawable(circularBitmapDrawable); 
     } 
    }); 
+0

我不想有一个圆形图像视图...只是为imageview添加一些边框半径 – tsiro

+0

@tsiro其中使用flirs virsion –

+0

滑行:4.0.0-RC0版本 – tsiro

3

我有同样的问题,在我的情况下,问题是我一直在努力,载量在像素尺寸更小(480)的图像,然后将ImageView的像素尺寸。 我的解决办法如下:

我在XML文件中的ImageView:

<ImageView 
    android:id="@+id/image_program_thumb" 
    android:layout_width="match_parent" 
    android:layout_height="186dp" /> 

ProgramViewHolder.java类

@BindView(R.id.image_program_thumb) ImageView mProgramThumbnail; 
..... 
void bindData(final Program item) { 
    RequestOptions requestOptions = new RequestOptions(); 
    requestOptions = requestOptions.transforms(new CenterCrop(), new RoundedCorners(16)); 
    Glide.with(itemView.getContext()) 
      .load(item.getImage()) 
      .apply(requestOptions) 
      .into(mProgramThumbnail); 
.... 

}

附:我使用Glide的4.2.0版本

-1

正如您在我的回答here中看到的,也可以使用Glid's Generated API来实现。它需要一些初步的工作,但随后可以灵活地为您做所有事情,因为您可以编写实际的代码,因此我认为这是一个长期的良好解决方案。另外,使用非常简单和整洁。

首先,设置Glide版本4+:

implementation 'com.github.bumptech.glide:glide:4.6.1' 
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' 

然后创建滑翔机的应用程序模块类触发注释处理:

@GlideModule 
public final class MyAppGlideModule extends AppGlideModule {} 

然后创建滑翔扩展,实际上做的工作。你可以自定义它做任何你想做的事:

@GlideExtension 
public class MyGlideExtension { 

private MyGlideExtension() {} 

    @NonNull 
    @GlideOption 
    public static RequestOptions roundedCorners(RequestOptionsoptions, @NonNull Context context, int cornerRadius) { 
     int px = Math.round(cornerRadius * (context.getResources().getDisplayMetrics().xdpi/DisplayMetrics.DENSITY_DEFAULT)); 
     return options.transforms(new RoundedCorners(px)); 
    } 
} 

添加这些文件后,建立你的项目。

然后用它在你的代码是这样的:

GlideApp.with(this) 
       .load(imageUrl) 
       .roundedCorners(getApplicationContext(), 5) 
       .into(imageView); 
+1

虽然此链接可能回答问题,但最好在此处包含答案的基本部分并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/19018408) – Sree

+0

感谢您的评论@Sree增加了答案的基本部分。 –