2015-07-30 2 views
1

У меня есть приложение, которое получает изображения из внутреннего хранилища и должно показывать их в ImageView. Поскольку загрузка изображений влияет на производительность приложения, я хотел бы сделать это асинхронно. Я задал вопрос this, и мне сказали использовать Пикассо. Приложение теперь идет быстро, но не показывает изображение. Это код, я использую, чтобы поместить изображение в ImageView:Picasso не показывает изображения

Picasso.with(c).load(path).resize(dpToPx(80), dpToPx(80)).centerCrop().into(holder.foto); 

Это адаптер, с комментировал линий я использовал без Пикассо. Таким образом, изображение отображается, но задерживает интерфейс:

public class FotoAdapter extends BaseAdapter { 
    private ArrayList<BeanFotos> fotos; 
    private LayoutInflater inflater=null; 
    Context c; 
    Handler handler; 

    public FotoAdapter(Context c, ArrayList<BeanFotos> fotos){ 
     this.fotos=fotos; 
     inflater=LayoutInflater.from(c); 
     this.c=c; 

    } 
    @Override 
    public int getCount() { 
     if(fotos!=null){ 
      return fotos.size(); 
     } 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 

     return fotos.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     ViewHolder holder; 
     if (convertView == null) { 


      convertView=inflater.inflate(R.layout.foto_layout, null); 
      holder=new ViewHolder(); 
      holder.lat=(TextView)convertView.findViewById(R.id.textlat); 
      holder.lon=(TextView)convertView.findViewById(R.id.textlon); 
      holder.foto=(ImageView)convertView.findViewById(R.id.foto); 
      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 

       String path=fotos.get(position).getFotoPath(); 
       Picasso.with(c).load(path).resize(dpToPx(80), dpToPx(80)).centerCrop().into(holder.foto); 
       /*Bitmap foto= BitmapFactory.decodeFile(path); 
       int bmWidth=foto.getHeight(); 
       int bmHeight=foto.getHeight(); 
       int ivWidth; 
       int ivHeigth; 
       int new_width; 
       int new_height; 
       ivWidth=dpToPx(80); 
       new_width=ivWidth; 
       new_height = (int) Math.floor((double) bmHeight *((double) new_width/(double) bmWidth)); 
       Bitmap newbitMap = Bitmap.createScaledBitmap(foto, new_width, new_height, true);*/ 
       holder.lat.setText(fotos.get(position).getLatitud().toString()); 
       holder.lon.setText(fotos.get(position).getLongitud().toString()); 
       //holder.foto.setImageBitmap(newbitMap); 

     return convertView; 
    } 

    private int dpToPx(int dp) 
    { 
     float density = c.getResources().getDisplayMetrics().density; 
     return Math.round((float)dp * density); 
    } 
    static class ViewHolder { 
     public TextView lat; 
     public TextView lon; 
     public ImageView foto; 
    } 
} 

Было бы здорово использовать Пикассо и показать изображение, но если это не возможно, что я мог сделать?

спасибо.

ответ

3

Используйте это для:

выборки из внутренней памяти

Picasso.with(c).load(new File(path)).resize(dpToPx(80), dpToPx(80)).centerCrop().into(holder.foto); 

загрузка из URL

Picasso.with(c).load(path).resize(dpToPx(80), dpToPx(80)).centerCrop().into(holder.foto); 
+0

Это сработало ... спасибо !! – Fustigador

+0

Спасибо, чувак, это была спасательная жизнь. – ochiWlad

1

Вы должны проанализировать путь Uri затем загрузить изображение

pathUri = Uri.fromFile(new File(path)); 
Picasso.with(c).load(pathUri).resize(dpToPx(80), dpToPx(80)).centerCrop().into(holder.foto);