11

私はRecyclerViewCardviewsを持っています。私はOLXアプリケーションのように、このCardViewの中でスライドする画像を必要とします。そうする最善の方法は何ですか? 私はcardviewの中にビューページを置くことを考えます。それは大丈夫ですか他の何かを試してみるべきでしょうか?リサイクラー内のcardviewでスライド画像を表示するにはどうすればよいですか?

ViewPagerとしましたが、遅すぎるようです。ここには、ビューページャアダプタの一部があります。私はこの変更を実装するためにGitHubに次のライブラリを使用することになり

@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

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

次に、このようなあなたのビットマップをロードします?縦か横か? – Sufian

+1

スライドをユーザーインタラクティブにする(つまり、ユーザーがスライドをドラッグする)か、そうでなければ自動的にしますか? –

+0

@Sufian horizo​​ntal – SERG

答えて

7

をあなたは右の道を進んでいます。

圧縮されていないビットマップではなく、圧縮されたビットマップを読み込むだけです。 ビットマップリソースをイメージビューに直接設定しています。 ピカソ https://github.com/square/picasso/

または効率的に大きなビットマップをロードするためのGoogleの公式のソースを使用するようにライブラリを使用しますか。

まず、あなたの活動に、このメソッドをコピーします。

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

その後、この方法は、ビットマップをデコードする:方向である何

@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

。それはあなたがそれを完了したら、あなたが横にスワイプし、ListViewからアイテムを削除することができます。

はあなたを助けるために以下の例を使用します。

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

・ホープ、このことができます:)

関連する問題