2017-06-01 111 views
0

如何在ViewPager垂直回收器視圖中一次實施一個項目輕掃。我也使用SnapHelper,但沒有得到正確的結果。請幫助我。在android編譯器中使用此依賴項: 'com.allattentionhere:autoplayvideos:0.0.9'。我的代碼如下......在Recyclerview中每次垂直滑動一個項目

public class MainActivity extends AppCompatActivity { 
    @BindView(R.id.rv_home) 
    AAH_CustomRecyclerView recyclerView; 
    private final List<MyModel> modelList = new ArrayList<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 
     Picasso p = Picasso.with(this); 
//  modelList.add(new MyModel("http://www.betcoingaming.com/webdesigns/animatedslider/images/liveroulette2.mp4","http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795681/2_rp0zyy.jpg","name1")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795681/2_rp0zyy.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795681/2_rp0zyy.jpg", "video1")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1491561340/hello_cuwgcb.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1491561340/hello_cuwgcb.jpg", "video2")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795675/3_yqeudi.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795675/3_yqeudi.jpg", "video4")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795675/1_pyn1fm.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795675/1_pyn1fm.jpg", "video5")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1491561340/hello_cuwgcb.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1491561340/hello_cuwgcb.jpg", "video6")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795681/2_rp0zyy.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795681/2_rp0zyy.jpg", "video9")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795676/4_nvnzry.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795676/4_nvnzry.jpg", "video11")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795681/2_rp0zyy.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795681/2_rp0zyy.jpg", "video12")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795675/3_yqeudi.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795675/3_yqeudi.jpg", "video16")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795675/1_pyn1fm.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795675/1_pyn1fm.jpg", "video17")); 
     modelList.add(new MyModel("http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70/v1481795681/2_rp0zyy.mp4", "http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795681/2_rp0zyy.jpg", "video18")); 
     //you can pass local file uri, but make sure it exists 
//  modelList.add(new MyModel("/storage/emulated/0/VideoPlay/myvideo.mp4","http://res.cloudinary.com/krupen/video/upload/w_300,h_150,c_crop,q_70,so_0/v1481795681/2_rp0zyy.jpg","video18")); 

     MyVideosAdapter mAdapter = new MyVideosAdapter(modelList, p); 
     LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     /* SnapHelper snapHelper = new LinearSnapHelper(); 
     snapHelper.attachToRecyclerView(recyclerView);*/ 

     //todo before setAdapter 
     recyclerView.setActivity(this); 
     //optional - to play only first visible video 
     recyclerView.setPlayOnlyFirstVideo(true); // false by default 
     //optional - download videos to local storage (requires "android.permission.WRITE_EXTERNAL_STORAGE" in manifest or ask in runtime) 
     recyclerView.setDownloadPath(Environment.getExternalStorageDirectory() + "/MyVideo"); // (Environment.getExternalStorageDirectory() + "/Video") by default 
     recyclerView.setDownloadVideos(true); // false by default 
     //extra - start downloading all videos in background before loading RecyclerView 
     List<String> urls = new ArrayList<>(); 
     for (MyModel object : modelList) { 
      if (object.getVideo_url() != null && object.getVideo_url().endsWith(".mp4")) 
       urls.add(object.getVideo_url()); 
     } 
     recyclerView.preDownload(urls); 

     recyclerView.setAdapter(mAdapter); 
     //to init videos before scrolling 
     recyclerView.smoothScrollBy(0, 1); 
     recyclerView.smoothScrollBy(0, -1); 
    } 
} 




public class MyVideosAdapter extends AAH_VideosAdapter { 
    private final List<MyModel> list; 
    private final Picasso picasso; 
    public class MyViewHolder extends AAH_CustomViewHolder { 
     // final TextView tv; 
     final ImageView img_vol; 
     //to mute/un-mute video (optional) 
     boolean isMuted; 
     public MyViewHolder(View x) { 
      super(x); 
      //tv = ButterKnife.findById(x, R.id.tv); 
      img_vol = ButterKnife.findById(x, R.id.img_vol); 
     } 
    } 

    public MyVideosAdapter(List<MyModel> list_urls, Picasso p) { 
     this.list = list_urls; 
     this.picasso = p; 
    } 

    @Override 
    public AAH_CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.single_card, parent, false); 
     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final AAH_CustomViewHolder holder, int position) { 
     //((MyViewHolder) holder).tv.setText(list.get(position).getName()); 

     //todo 
     holder.setImageUrl(list.get(position).getImage_url()); 
     holder.setVideoUrl(list.get(position).getVideo_url()); 
     //load image into imageview 
     if (list.get(position).getImage_url() != null && !list.get(position).getImage_url().isEmpty()) { 
      picasso.load(holder.getImageUrl()).config(Bitmap.Config.RGB_565).into(holder.getAAH_ImageView()); 
     } 
     //to mute/un-mute video (optional) 
     holder.getAah_vi().setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (((MyViewHolder) holder).isMuted) { 
        holder.unmuteVideo(); 
        ((MyViewHolder) holder).img_vol.setImageResource(R.drawable.ic_unmute); 
       } else { 
        holder.muteVideo(); 
        ((MyViewHolder) holder).img_vol.setImageResource(R.drawable.ic_mute); 
       } 
       ((MyViewHolder) holder).isMuted = !((MyViewHolder) holder).isMuted; 
      } 
     }); 

     if (list.get(position).getVideo_url() == null) { 
      ((MyViewHolder) holder).img_vol.setVisibility(View.GONE); 
     } else { 
      ((MyViewHolder) holder).img_vol.setVisibility(View.VISIBLE); 
     } 
    } 


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


    @Override 
    public int getItemViewType(int position) { 
     return 0; 
    } 
} 


And used this dependency in android compile 

'com.allattentionhere:autoplayvideos:0.0.9'

+0

使「single_card」的高度和寬度匹配父級,因此recycleview將一次顯示單個項目。 –

+0

感謝您的重播。其實我需要像viewPager一樣的效果。 – Gopinath

+0

然後我不認爲recycleview是一種方式。您應該實現垂直viewpager,並查看垂直效果的Viewpager.pageTransform。 –

回答