web-dev-qa-db-ja.com

グライドによる画像の読み込みが遅い

アプリをサーバーに接続しましたが、写真の読み込みが非常に遅いようで、上下にスクロールすると、画像をもう一度読みたいと思っています。これは私のグライドのアダプターです:

DataAdapter

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private Context context;
    private ArrayList<AndroidVersion> Android;


    public DataAdapter(Context context,ArrayList<AndroidVersion> Android) {
        this.context = context;
        this.Android = Android;
    }


    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

        viewHolder.tv_name.setText(Android.get(i).getName());
        viewHolder.tv_version.setText(Android.get(i).getVer());
        viewHolder.tv_api_level.setText(Android.get(i).getApi());

        // load image into imageview using glide
        Glide.with(context).load("http://memaraneha.ir/Erfan/images/"+Android.get(i).getPic())
                .placeholder(R.drawable.truiton)
                .error(R.drawable.truiton)
                .into(viewHolder.tv_image);
    }

    @Override
    public int getItemCount() {
        return Android.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView tv_name,tv_version,tv_api_level;
        public ImageView tv_image;
        public ViewHolder(View view) {
            super(view);

            tv_name = (TextView)view.findViewById(R.id.tv_name);
            tv_version = (TextView)view.findViewById(R.id.tv_version);
            tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);
            tv_image= (ImageView) view.findViewById(R.id.img);

        }
    }

}

誰かが助けることができるならそれをしてください!

7
erfan

URLから画像を取得するときにこれを追加するだけで、このコードはその画像のサイズを縮小します

あなたもこれを行うことができます、

ByteArrayOutputStream bytes = new ByteArrayOutputStream();

    //save scaled down image to cache dir
    newBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

    File imageFile = new File(filePath);

    // write the bytes in file
    FileOutputStream fo = new FileOutputStream(imageFile);
    fo.write(bytes.toByteArray());

チェック この例

2
Amit Vaghela

dontTransform()メソッドを使用しましたが、ほとんど1秒節約できました。画像は本当に最初にリストにロードされます。

2
Prabhat

diskCacheStrategy(DiskCacheStrategy.ALL)を使用します。

詳細については、こちらをご覧ください ここをクリック

0
Rjz Satvara