社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近项目中需要有轮播控件,但是以前 做的都是只有图片轮播,这次需要首个为视频,网上查了半天没有找到现成的代码,做好以后决定发一个上来,已做记录,其中视频播放控件使用的饺子视频。现在进入正题吧
软件截图:
主要代码部分:
public class TaocanDetialActivity extends BaseActivity {
protected ViewPager mViewpager;
private ViewSwitcherHelper mViewSwitchHelper;
private LinearLayout del;//放底部小圆点控件
private List<View> mViewlist = new ArrayList<>();
List<Lunbo> ads=new ArrayList<>();
String videourl="http://www.xyxfs.com/statics/images/video.mp4";//视频地址
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_taocandetial);
initviewpager();
Lunbo lunbo=new Lunbo("http://img1.imgtn.bdimg.com/it/u=4194723123,4160931506&fm=200&gp=0.jpg","1");//1代表视频这张图为视频缩略图
Lunbo lunbo2=new Lunbo("http://img2.imgtn.bdimg.com/it/u=3817131034,1038857558&fm=27&gp=0.jpg","2");
Lunbo lunbo3=new Lunbo("http://img1.imgtn.bdimg.com/it/u=4194723123,4160931506&fm=200&gp=0.jpg","2");
Lunbo lunbo4=new Lunbo("http://img5.imgtn.bdimg.com/it/u=1812408136,1922560783&fm=27&gp=0.jpg","2");
ads.add(lunbo);
ads.add(lunbo2);
ads.add(lunbo3);
ads.add(lunbo4);
setBannerview(ads);//ads内容为从接口获取到的内容
}
private void initviewpager() {
mViewpager = findViewById(R.id.viewPager);
del = findViewById(R.id.del);
mViewSwitchHelper = new ViewSwitcherHelper(TaocanDetialActivity.this, del,
getResources().getDrawable(
R.drawable.tab_yes),
getResources().getDrawable(
R.drawable.tab_no));
mViewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
mViewSwitchHelper.setCurrent(arg0);
//默认首个就是视频文件,其他都为图片文件 首页的时候开始播放 其他页暂停
if (arg0==0){
JZVideoPlayerStandard.goOnPlayOnResume();
}else {
JZVideoPlayerStandard.goOnPlayOnPause();
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
//方便测试写的内部实体类
class Lunbo{
String url;//图片地址
String tag;//区分图片 和视频
public Lunbo(String url, String tag) {
this.url = url;
this.tag = tag;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
}
/**
* 顶部轮播图
*/
protected void setBannerview(List<Lunbo> lunbos) {
//区分图片和视频布局
for (int i=0;i<lunbos.size();i++){
if (lunbos.get(i).getTag().equals("1")) {//1 为视频 以下布局中是视频布局
View view = LayoutInflater.from(this).inflate(R.layout.view_guide_video, null);
JZVideoPlayerStandard videoplayer=view.findViewById(R.id.videoplayer);
videoplayer.setUp(videourl,JZVideoPlayerStandard.SCREEN_WINDOW_NORMAL, "");
Glide.with(TaocanDetialActivity.this).load(lunbos.get(i).getUrl()).into(videoplayer.thumbImageView);
mViewlist.add(view);
} else {//以下布局中为图片布局
View view = LayoutInflater.from(this).inflate(R.layout.view_guide_two, null);
ImageView _imageview = view.findViewById(R.id.iv_center);
MyGlideImageLoader.getInstance().onNetUrl2(TaocanDetialActivity.this, _imageview, lunbos.get(i).getUrl());//这是图片加载方法,代码就不贴了,通过url显示图片 自行查找吧
mViewlist.add(view);
}
}
mViewpager.setAdapter(new BannerAdapter(mViewlist));
mViewSwitchHelper.setViewSwitcherTip(mViewlist.size(), 0);
}
@Override
protected void onPause() {
super.onPause();
JZVideoPlayerStandard.goOnPlayOnPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
JZVideoPlayerStandard.releaseAllVideos();
}
}
这是activity的布局代码 我只放入了轮播图部分
<ScrollView
android:id="@+id/scrollview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frame_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_360" />
<LinearLayout
android:id="@+id/del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|bottom"
android:layout_marginBottom="@dimen/dp_10"
android:gravity="center"
android:orientation="horizontal" />
<ImageView
android:id="@+id/delete_this_layout"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_30"
android:src="@drawable/finish_lift_yuan" />
</FrameLayout>
</LinearLayout>
</ScrollView>
ViewSwitcherHelper 类的代码:
public class ViewSwitcherHelper {
private Drawable mPosOff;
private Drawable mPosOn;
private ViewGroup viewGroup;
private Context mContext;
private int currentPos;
public ViewSwitcherHelper(Context context, ViewGroup layout,Drawable draw_one,Drawable draw_two) {
mContext = context;
viewGroup = layout;
mPosOn = draw_one;
mPosOff= draw_two;
}
public void setViewSwitcherTip(int count, int current) {
this.currentPos = current;
viewGroup.removeAllViews();
if (count > 1) {
for (int i = 0; i < count; i++) {
ImageView mImageView = getPositionView(i == current);
mImageView.setTag(i);
viewGroup.addView(mImageView);
}
} else {
}
}
private ImageView getPositionView(boolean isOn) {
ImageView mImageView = new ImageView(mContext);
mImageView.setImageDrawable(isOn ? mPosOn : mPosOff);
LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
mLayoutParams.setMargins(DensityUtils.dip2px(XiuApplication.getInstance(),2), DensityUtils.dip2px(XiuApplication.getInstance(),2), DensityUtils.dip2px(XiuApplication.getInstance(),2), DensityUtils.dip2px(XiuApplication.getInstance(),4));
mImageView.setLayoutParams(mLayoutParams);
return mImageView;
}
public void setCurrent(int current) {
if (current >= viewGroup.getChildCount()) {
return;
}
viewGroup.removeViewAt(currentPos);
viewGroup.addView(getPositionView(false), currentPos);
this.currentPos = current;
viewGroup.removeViewAt(current);
viewGroup.addView(getPositionView(true), current);
}
}
BannerAdapter 代码:
public class BannerAdapter extends PagerAdapter {
private List<View> viewList;
private int size;
private final int cacheCount = 3;
public BannerAdapter(List<View> viewList) {
this.viewList = viewList;
size = viewList.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (viewList.size() > cacheCount){
container.removeView(viewList.get(position%size));
}
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ViewGroup parent = (ViewGroup) viewList.get(position%size).getParent();
if (parent != null) {
parent.removeView(viewList.get(position%size));
}
container.addView(viewList.get(position%size));
return viewList.get(position%size);
}
@Override
public int getCount() {
return size;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
view_guide_video 视频布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<cn.jzvd.JZVideoPlayerStandard
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_350" />
</FrameLayout>
图片的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleType="fitXY" />
</RelativeLayout>
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!