直播商城源码,商品展示分为视频和图片展示两种方式

直播商城源码,商品展示分为视频和图片展示两种方式实现的相关代码

 

1
implementation 'com.github.bumptech.glide:glide:4.11.0'<br>implementation 'androidx.recyclerview:recyclerview:1.0.0'<br> //轮播视频及播放器<br>implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'<br>implementation 'cn.jzvd:jiaozivideoplayer:7.4.1'

​清单文件中加入网络权限

 

1
<uses-permission android:name="android.permission.INTERNET" />

主要代码

 

1
<br>package com.demo.cn;<br>import android.os.Bundle;<br>import android.view.View;<br>import android.widget.RelativeLayout;<br>import android.widget.TextView;<br>import androidx.annotation.NonNull;<br>import androidx.appcompat.app.AppCompatActivity;<br>import androidx.recyclerview.widget.LinearLayoutManager;<br>import androidx.recyclerview.widget.PagerSnapHelper;<br>import androidx.recyclerview.widget.RecyclerView;<br>import com.chad.library.adapter.base.BaseViewHolder;<br>import java.util.ArrayList;<br>import java.util.List;<br>import butterknife.BindView;<br>import butterknife.ButterKnife;<br>import cn.jzvd.Jzvd;<br>import cn.jzvd.JzvdStd;<br>public class MainActivity extends AppCompatActivity {<br>    @BindView(R.id.shop_banner)<br>    RecyclerView shopBanner;<br>    @BindView(R.id.banner_num)<br>    TextView bannerNum;<br>    private LinearLayoutManager mLayoutManager;<br>    private ShopBannerAdapter mShopBannerAdapter;<br>    private PagerSnapHelper mSnapHelper;<br>    protected void onCreate(Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        setContentView(R.layout.activity_main);<br>        ButterKnife.bind(this);<br>        initBanner();<br>    }<br>    private void initBanner() {<br>        List<VideoMultyItem> mList = new ArrayList<>();<br>        //添加一个视频VideoMultyItem中三个参数,第一个参数是视频的地址,第二个参数1 是视频  2  是商品,第三个参数为图片地址(视频类型时用作视频封面)<br>        mList.add(new VideoMultyItem("https://f.video.weibocdn.com/001v6186gx07Ofj1jCJx01041200b8xc0E010.mp4?label=mp4_1080p&template=1920x1080.25.0&trans_finger=0bde055d9aa01b9f6bc04ccac8f0b471&media_id=4659228904980611&tp=8x8A3El:YTkl0eM8&us=0&ori=1&bf=4&ot=h&ps=3lckmu&uid=3ZoTIp&ab=3915-g1,5178-g0,966-g1,1493-g0,1192-g0,1191-g0,1258-g0&Expires=1627902317&ssig=RsS7BVBWq1&KID=unistore,video", 1, "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimages.669pic.com%2Felement_pic%2F55%2F44%2F38%2F7%2F07097c64a940a7c1b669345f1c6360ca.jpg&refer=http%3A%2F%2Fimages.669pic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1630490770&t=c8a62639eafd4fe4f26a545f28ab853d"));<br>        for (int i = 0; i < 5; i++) {<br>            mList.add(new VideoMultyItem(null, 2, "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimages.669pic.com%2Felement_pic%2F55%2F44%2F38%2F7%2F07097c64a940a7c1b669345f1c6360ca.jpg&refer=http%3A%2F%2Fimages.669pic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1630490770&t=c8a62639eafd4fe4f26a545f28ab853d"));<br>        }<br>        mLayoutManager = new LinearLayoutManager(this);<br>        mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);<br>        shopBanner.setLayoutManager(mLayoutManager);<br>        mShopBannerAdapter = new ShopBannerAdapter(mList);<br>        mSnapHelper = new PagerSnapHelper();<br>        shopBanner.setOnFlingListener(null);<br>        mSnapHelper.attachToRecyclerView(shopBanner);<br>        shopBanner.setAdapter(mShopBannerAdapter);<br>        bannerNum.setText("1/" + mList.size());<br>        shopBanner.addOnScrollListener(new RecyclerView.OnScrollListener() {<br>            @Override<br>            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {<br>                super.onScrollStateChanged(recyclerView, newState);<br>            }<br>            @Override<br>            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {<br>                super.onScrolled(recyclerView, dx, dy);<br>                LinearLayoutManager layoutManager = (LinearLayoutManager) shopBanner.getLayoutManager();<br>                int position = layoutManager.findFirstVisibleItemPosition();<br>                bannerNum.setText((position + 1) + "/" + mList.size());<br>            }<br>        });<br>        shopBanner.addOnScrollListener(new RecyclerView.OnScrollListener() {<br>            @Override<br>            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {<br>                switch (newState) {<br>                    case RecyclerView.SCROLL_STATE_IDLE:<br>                        //停止滚动<br>                        autoPlay(recyclerView);<br>                        break;<br>                    case RecyclerView.SCROLL_STATE_DRAGGING:<br>                        //拖动<br>                        break;<br>                    case RecyclerView.SCROLL_STATE_SETTLING:<br>                        //惯性滑动<br>                        Jzvd.releaseAllVideos();<br>                        break;<br>                    default:<br>                        break;<br>                }<br>            }<br>            @Override<br>            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {<br>                super.onScrolled(recyclerView, dx, dy);<br>            }<br>        });<br>    }<br>    private void autoPlay(RecyclerView recyclerView) {<br>        View view = mSnapHelper.findSnapView(mLayoutManager);<br>        if (view != null) {<br>            if (view instanceof RelativeLayout) {<br>                Jzvd.releaseAllVideos();<br>            } else {<br>                BaseViewHolder viewHolder = (BaseViewHolder) recyclerView.getChildViewHolder(view);<br>                if (viewHolder != null) {<br>                    JzvdStd myVideoPlayer = viewHolder.getView(R.id.player);<br>                    myVideoPlayer.startVideo();<br>                }<br>            }<br>        }<br>    }<br>    @Override<br>    protected void onPause() {<br>        super.onPause();<br>        JzvdStd.releaseAllVideos();<br>    }<br>}<br>public class ShopBannerAdapter extends BaseMultiItemQuickAdapter<VideoMultyItem, BaseViewHolder> {<br>    /**<br>     * Same as QuickAdapter#QuickAdapter(Context,int) but with<br>     * some initialization data.<br>     *<br>     * @param data A new list is created out of this one to avoid mutable list<br>     */<br>    public ShopBannerAdapter(List<VideoMultyItem> data) {<br>        super(data);<br>        addItemType(1, R.layout.banner_video);<br>        addItemType(2, R.layout.banner_image);<br>    }<br>    @Override<br>    protected void convert(BaseViewHolder helper, VideoMultyItem item) {<br>        switch (item.getItemType()) {<br>            case 1:<br>                //视频<br>                JzvdStd jzvdStd = helper.getView(R.id.player);<br>                //去掉<br>                jzvdStd.setUp(item.getUrl() + "", "", JzvdStd.SCREEN_NORMAL);<br>                Glide.with(mContext).load(item.getCoverUrl()).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(jzvdStd.posterImageView);//设置封面<br>                jzvdStd.setVideoImageDisplayType(jzvdStd.VIDEO_IMAGE_DISPLAY_TYPE_FILL_PARENT);//去掉黑框<br>                jzvdStd.startVideo();//自动播放<br>                break;<br>            case 2:<br>                ImageView imageView = helper.getView(R.id.image);<br>                Glide.with(mContext)<br>                        .load(item.getCoverUrl())<br>                        .centerCrop()<br>                        .skipMemoryCache(true)<br>                        .diskCacheStrategy(DiskCacheStrategy.RESOURCE)<br>                        .into(imageView);<br>                imageView.setOnClickListener(new View.OnClickListener() {<br>                    @Override<br>                    public void onClick(View view) {<br>                    }<br>                });<br>                break;<br>            default:<br>                break;<br>        }<br>    }<br>}

 

banner_video.xml

 

1
<br><?xml version="1.0" encoding="utf-8"?><br><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"<br>    android:layout_width="match_parent"<br>    android:layout_height="match_parent"><br>    <RelativeLayout<br>        android:layout_width="match_parent"<br>        android:layout_height="match_parent"><br>        <cn.jzvd.JzvdStd<br>            android:id="@+id/player"<br>            android:layout_width="match_parent"<br>            android:layout_height="match_parent"<br>            android:scaleType="fitXY"/><br>    </RelativeLayout><br></FrameLayout>

 

 

banner_image.xml

 

1
<br><?xml version="1.0" encoding="utf-8"?><br><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br>    android:layout_width="match_parent"<br>    android:layout_height="match_parent"<br>    android:orientation="vertical"><br>    <ImageView<br>        android:id="@+id/image"<br>        android:layout_width="match_parent"<br>        android:layout_height="match_parent"<br>        android:scaleType="fitXY" /><br></RelativeLayout><br>VideoMultyItem 文件<br>/**<br> * date:2021/8/2<br> * author:wsm(admin)<br> * funcation:<br> */<br>public class VideoMultyItem implements MultiItemEntity {<br>    private String url;<br>    //1 是视频  2  是商品<br>    private int flag;<br>    private String coverUrl;<br>    public String getUrl() {<br>        return url;<br>    }<br>    public void setUrl(String url) {<br>        this.url = url;<br>    }<br>    public int getFlag() {<br>        return flag;<br>    }<br>    public void setFlag(int flag) {<br>        this.flag = flag;<br>    }<br>    public String getCoverUrl() {<br>        return coverUrl;<br>    }<br>    public void setCoverUrl(String coverUrl) {<br>        this.coverUrl = coverUrl;<br>    }<br>    public VideoMultyItem(String url, int flag, String coverUrl) {<br>        this.url = url;<br>        this.flag = flag;<br>        this.coverUrl = coverUrl;<br>    }<br>    @Override<br>    public int getItemType() {<br>        return flag;<br>    }<br>}

 

以上就是 直播商城源码,商品展示分为视频和图片展示两种方式实现的相关代码,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(445)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示