2015-07-09 3 views
0

У меня есть вид Recycler и вид, содержащий n количество изображений url. Изображения url имеют разное разрешение. Я использую загрузчик изображений Picasso для загрузки изображений и установки RoundedCornerTransofrmation() с фиксированным радиусом. Но разные изображения устанавливаются с разным радиусом.Как установить уникальный радиус для Picasso RoundedCornerTransofrmation()

+0

Я имею в виду изображения с низким разрешением, радиус увеличивается и его видимый округлый образ. Но в изображениях с высоким разрешением его рабочий штраф – Nithinjith

ответ

0

Я нашел решение установить фиксированный радиус для различных снимков с разрешением в Пикассо roundedCornerTransformation()

Внедрение пользовательского класса с помощью инструментов com.squareup.picasso.Transformation

и изменять способ преобразования, как показано ниже, как

@Override общественного Bitmap преобразования (конечного источник растрового изображения) {

//Get the Image Width Form incoming image 
    int radius = source.getWidth(); 

    //Set the percentage value for radius 
    radius = (radius*10)/100; 

    final Paint paint = new Paint(); 
    paint.setAntiAlias(true); 

    paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); 

    Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 
    canvas.drawRoundRect(new RectF(margin, margin, source.getWidth() - margin, source.getHeight() - margin), radius, radius, paint); 

    if (source != output) { 
     source.recycle(); 
    } 

    return output; 
} 

На основании процентного значения, можно задать радиус кривых изображений как фиксированный.

Спасибо.

0

вы можете добавить этот класс в пакете:

import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.BitmapShader; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.RectF; 
import android.graphics.Shader; 

// enables hardware accelerated rounded corners 
// original idea here : http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/ 
public class RoundedTransformation implements com.squareup.picasso.Transformation { 
    private final int radius; 
    private final int margin; // dp 

    // radius is corner radii in dp 
    // margin is the board in dp 
    public RoundedTransformation(final int radius, final int margin) { 
     this.radius = radius; 
     this.margin = margin; 
    } 

    @Override 
    public Bitmap transform(final Bitmap source) { 
     final Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); 

     Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888); 
     Canvas canvas = new Canvas(output); 
     canvas.drawRoundRect(new RectF(margin, margin, source.getWidth() - margin, source.getHeight() - margin), radius, radius, paint); 

     if (source != output) { 
      source.recycle(); 
     } 

     return output; 
    } 

    @Override 
    public String key() { 
     return "rounded"; 
    } 

вы можете использовать выше класс, как это:

Picasso.with(c).load(s[0]).placeholder(R.drawable.placeholder).transform(new RoundedTransformation(40,4)).error(c.getResources().getDrawable(R.drawable.placeholder)).into(holder.im); 
+0

Спасибо за ваш ответ, и я сделал то же самое. Но как мы можем установить переменный радиус изображения с низким разрешением и изображение с высоким разрешением динамически. Моя проблема заключается в том, что кривая изображения увеличивается для изображений с низким разрешением и уменьшается для изображений с высоким разрешением. Можно ли установить радиус на основе разрешения изображения динамически ?. – Nithinjith

+0

@ Нитьджит, радиус визуализируется одинаково для изображений с низким и высоким разрешением, невозможно отобразить другой радиус для изображений с низким и высоким разрешением. –

Смежные вопросы