短視訊直播原始碼,自定義圖片或視訊的迴圈播放

zhibo系統開發發表於2022-06-09

短視訊直播原始碼,自定義圖片或視訊的迴圈播放

1、自定義viewPager,目的是為了實現愛奇藝Banner樣式,複寫Viewpager的構造器 處理setOnHierarchyChangeListener監聽

   public class DepthPageTransformer implements ViewPager.PageTransformer {
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @SuppressLint("NewApi")
        public void transformPage(View view, float position) {
            if (position < -1) { // [-Infinity,-1)
                view.setScaleY(minScale);
                view.setAlpha(minAlpha);
            } else if (position <= 0) { // [-1,0]
                float scaleFactor = minScale + (1 - minScale) * (1 - Math.abs(position));
                float alphaFactor = minAlpha + (1 - minAlpha) * (1 - Math.abs(position));
                view.setScaleY(scaleFactor);
                view.setAlpha(alphaFactor);
            } else if (position <= 1) { // (0,1]
                float scaleFactor = minScale + (1 - minScale) * (1 - Math.abs(position));
                float alphaFactor = minAlpha + (1 - minAlpha) * (1 - Math.abs(position));
                view.setScaleY(scaleFactor);
                view.setAlpha(alphaFactor);
            } else { // (1,+Infinity]
                view.setScaleY(minScale);
                view.setAlpha(minAlpha);
            }
            view.setAlpha(1);
        }
    }


此處定義了minScale 和minAlpha兩個引數來控制左右兩邊的 展示部分 ,用set方法可以設定大小(這裡的大小是百分比)

2、自定義輪播需要的圖片和指示器(xml就不寫了,需要ViewPager和LinearLayout )。

①在attrs裡面寫好需要自定義的屬性。(左右間距、指示器位置等...我這就打住自定義View的過程了。)

②pagerAdapter的修改

 @Override
        public Object instantiateItem(ViewGroup container, final int position) {
            if (creator == null) {
                throw new RuntimeException("[Banner] --> The layout is not specified,please set holder");
            }
            BannerViewHolder holder = creator.createViewHolder();
 
            View view = holder.createView(container.getContext());
            container.addView(view);
 
            if (mDatas != null && mDatas.size() > 0) {
                holder.onBind(container.getContext(), toRealPosition(position), mDatas.get(toRealPosition(position)));
            }
 
            //*****主要是在pagerAdapter在中,給整個控制元件加上條目點選事件
            if (listener != null) {
                view.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        listener.onBannerClick(toRealPosition(position));
                    }
                });
            }
            return view;
        }


整個控制元件加上條目點選事件,實現點選事件

③實現ViewPager的OnPageChangeListener 監聽,其中的onPageSelected 方法主要寫頁面滑動的邏輯

@Override
    public void onPageSelected(int position) {
        currentItem = position;
        if (mOnPageChangeListener != null) {
            mOnPageChangeListener.onPageSelected(toRealPosition(position));
        }
        if (bannerStyle == BannerConfig.CIRCLE_INDICATOR ||
                bannerStyle == BannerConfig.CIRCLE_INDICATOR_TITLE ||
                bannerStyle == BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE ||
                bannerStyle == BannerConfig.CUSTOM_INDICATOR) {
            if (isLoop) {
                if (mIndicatorSelectedDrawable != null && mIndicatorUnselectedDrawable != null) {
                    indicatorImages.get((lastPosition - 1 + count) % count).setImageDrawable(mIndicatorUnselectedDrawable);
                    indicatorImages.get((position - 1 + count) % count).setImageDrawable(mIndicatorSelectedDrawable);
                } else {
                    indicatorImages.get((lastPosition - 1 + count) % count).setImageResource(mIndicatorUnselectedResId);
                    indicatorImages.get((position - 1 + count) % count).setImageResource(mIndicatorSelectedResId);
                }
            } else {
                if (mIndicatorSelectedDrawable != null && mIndicatorUnselectedDrawable != null) {
                    indicatorImages.get((lastPosition + count) % count).setImageDrawable(mIndicatorUnselectedDrawable);
                    indicatorImages.get((toRealPosition(position) + count) % count).setImageDrawable(mIndicatorSelectedDrawable);
                } else {
                    indicatorImages.get((lastPosition + count) % count).setImageResource(mIndicatorUnselectedResId);
                    indicatorImages.get((toRealPosition(position) + count) % count).setImageResource(mIndicatorSelectedResId);
                }
            }
            lastPosition = position;
        }}


以上就是 短視訊直播原始碼,自定義圖片或視訊的迴圈播放,更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2899631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章