Android 视频和图片轮播控件,仿淘宝商品详情页 - Go语言中文社区

Android 视频和图片轮播控件,仿淘宝商品详情页


最近项目中需要有轮播控件,但是以前 做的都是只有图片轮播,这次需要首个为视频,网上查了半天没有找到现成的代码,做好以后决定发一个上来,已做记录,其中视频播放控件使用的饺子视频。现在进入正题吧

这是Activity界面,四张图片,第一张作为视频的缩略图展示的,视频链接单独拿出来的,可以根据接口取出。

代码中分为两种布局,一种为图片,一种为视频,根据返回数据tag 区分,这个跟后台对接好判断字段即可。

以下代码以贴全,剩下的图片资源没有贴入,饺子视频的jar包自己导入就好了

Demo我会抽时间 写出来,及时上传到这里的。我的博客不美观,能帮上你就好~~~~~~

软件截图:

12
3

4

 

主要代码部分:

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>

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_20800531/article/details/103770490
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 16:10:38
  • 阅读 ( 669 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢