在回收商内部的cardview中进行滑动图像的最佳方法是什么?

SER*_*ERG 11 android android-viewpager android-cardview android-recyclerview

我有一个RecyclerViewCardview秒.我想在这个CardView中滑动图像,就像在OLX应用程序中一样.这样做的最佳方法是什么?我想将viewpager放在cardview中.没关系,或者我应该尝试其他的东西?

我做到了,ViewPager但看起来太慢了.这是viewpager适配器的一部分.

 @Override
public Object instantiateItem(ViewGroup collection, int position) {

    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.viewpager_custom, collection, false);
    collection.addView(layout);

    ImageView image = (ImageView) layout.findViewById(R.id.viewPagerImageView);
    image.setImageResource(mPics[position]);

    return layout;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Vis*_*ngh 7

你走对了路.

只做一件事就是加载压缩的位图而不是未压缩的位图.您正在直接将位图资源设置为您的imageview.使用像毕加索 这样的图书馆https://github.com/square/picasso/

或使用谷歌的官方来源有效地加载大位图.

首先在您的活动中复制此方法:

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}
Run Code Online (Sandbox Code Playgroud)

然后这个方法来解码位图:

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
        int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}
Run Code Online (Sandbox Code Playgroud)

然后像这样加载你的位图:

@Override
public Object instantiateItem(ViewGroup collection, int position) {

    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.viewpager_custom, collection, false);
    collection.addView(layout);

    ImageView image = (ImageView) layout.findViewById(R.id.viewPagerImageView);
    image.setImageBitmap(
    decodeSampledBitmapFromResource(getResources(), R.id.myimage, reqwidth, reqheight));

    return layout;
}
Run Code Online (Sandbox Code Playgroud)