11

Cardview s ile RecyclerView var. Ben de OLX uygulamasında olduğu gibi bu CardView içinde kayan görüntüler istiyorum. Bunu yapmanın en iyi yolu nedir? Viewer'ı cardview içine koymayı düşünüyorum. Tamam mı yoksa belki başka bir şey denemeliyim?Kart görüntülemede kayan görüntülerin en iyi yolu nedir?

ViewPager ile yaptım ama çok yavaş görünüyor. Burada viewpager adaptörünün bir parçası.

@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; 
} 

enter image description here

+1

yönü nedir ? Dikey mi yatay mı? – Sufian

+1

Kaymanın, kullanıcı etkileşimli olmasını (yani kullanıcı slaytları sürükleyerek) veya başka bir şekilde otomatik olmasını ister misiniz? –

+0

@Sufian horizontal – SERG

cevap

7

Doğru yoldan gidiyoruz.

Sadece bir şey sıkıştırılmamış olanlar yerine sıkıştırılmış bitmap'leri yükleyin. Bitmap kaynağını doğrudan görüntü ekranınıza ayarlıyorsunuz. Ya gibi https://github.com/square/picasso/

Picasso kütüphane kullanma veya verimli büyük bitmapleri yüklemek için google'ın resmi kaynağını kullanın.

Öncelikle etkinlik bu yöntemi kopyalayın:

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; 
} 

Sonra bu yöntem deşifre etmek bitmaps:

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); 
} 

O zaman bu gibi bit eşlem yüklemek:

@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; 
} 
1

ben bu değişikliği uygulamak için GitHub aşağıdaki kütüphaneyi kullanmak. Bu adımı tamamladıktan sonra hotizontally tokatlamak ve öğeyi ListView kaldırmak sağlar.

size yardım etmek için aşağıdaki örneği kullanın:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mItems = new ArrayList<>(30); 
    for (int i = 0; i < 30; i++) { 
     mItems.add(String.format("Card number %2d", i)); 
    } 

    mAdapter = new CardViewAdapter(mItems); 

    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setAdapter(mAdapter); 

    SwipeableRecyclerViewTouchListener swipeTouchListener = 
      new SwipeableRecyclerViewTouchListener(mRecyclerView, 
        new SwipeableRecyclerViewTouchListener.SwipeListener() { 
         @Override 
         public boolean canSwipe(int position) { 
          return true; 
         } 

         @Override 
         public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           mItems.remove(position); 
           mAdapter.notifyItemRemoved(position); 
          } 
          mAdapter.notifyDataSetChanged(); 
         } 

         @Override 
         public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           mItems.remove(position); 
           mAdapter.notifyItemRemoved(position); 
          } 
          mAdapter.notifyDataSetChanged(); 
         } 
        }); 

    mRecyclerView.addOnItemTouchListener(swipeTouchListener); 

Umut bu yardımcı olur :)

İlgili konular