如何实现一个项目在回收器视图中一次滑动,如viewpager垂直。我也使用SnapHelper但没有得到正确的结果。请帮助我。在android编译中使用这个依赖: 'com.allattentionhere:autoplayvideos:0.0.9'。我的代码低于......
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 :(得分:0)
也许这会帮助你https://github.com/Dan-TD/SnappyRecyclerView,但你必须做@Mayank所说的。
答案 1 :(得分:0)
将Recyclerview附加到这段代码上,它将像超级魅力一样工作:)
SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);
答案 2 :(得分:0)
要一次仅滚动一项,请使用 pager snap helper 而不是线性
SnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);