admin
2021-04-01 d27fa2154fe6c6b40048333e75ac11f1a3f5fac5
PPTV优化,相关bug修改
43个文件已修改
32个文件已添加
2192 ■■■■ 已修改文件
BuWanVideo/res/drawable-xhdpi/ic_activity_main_search.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/ic_recommend_watch_history.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/icon_dialog_vip_new_item_input.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/icon_vip_dialog_close_new.png 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_dialog_user_protocol_positive.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_feedback_input_bg.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_mine_functions_bg.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_new_dialog_vip_bg.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_bg.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_bottom_item_bg.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_bottom_item_selected_bg.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_middle_item_bg.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_middle_item_selected_bg.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_single_item_bg.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_single_item_selected_bg.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_top_item_bg.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable/shape_video_detail_resource_top_item_selected_bg.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/activity_feedback.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/activity_main.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/browser_fengxing_activity.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/dialog_vip_new.xml 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/dialog_vip_new_item.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/fav_item.xml 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_album_list_ad.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_movie.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_recommend_home_type.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_video_search_result_album.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/item_video_search_result_video.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/mine_fragment.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/mvideo_activity.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/search_actvity.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/search_result_activity.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/search_result_top_bar.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/watch_history_item.xml 113 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/values/colors.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoAPI.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoApplication.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/VideoInfo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/vo/PPTVVideoActivityInfoVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/vo/PPTVWatchVIPVideoActivityWay.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/BaseActivity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/ad/SplashADFragment.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/common/ListVideoAdapter.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/dialog/VIPNewDialog.java 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MineFragment.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/PPTVPlayFragment.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recent/WatchHistoryAdapter.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendFragment.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchResultActivity.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/video/SearchResultAdapter.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/video/VideoColumn2Adapter.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/video/VideoRecommendAdapter.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/SplashAdUtil.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/browser/PPJavaInterface.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/video/VideoUIUtil.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/build.gradle 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/proguard-rules.pro 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/androidTest/java/com/lzj/gallery/library/ExampleInstrumentedTest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/AndroidManifest.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/java/com/lzj/gallery/library/adapter/BannerPagerAdapter.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/java/com/lzj/gallery/library/transformer/CornerTransform.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/java/com/lzj/gallery/library/transformer/ZoomPageTransformer.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/java/com/lzj/gallery/library/views/BannerViewPager.java 482 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/res/layout/banner_img_layout.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/res/layout/banner_view_layout.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/res/mipmap-xhdpi/ic_banner_error.png 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/res/mipmap-xhdpi/ic_banner_point.png 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/res/mipmap-xhdpi/ic_banner_point_press.png 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/main/res/values/strings.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gallery/src/test/java/com/lzj/gallery/library/ExampleUnitTest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-common/src/com/lcjian/library/util/glide/GlideRoundTransform.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
settings.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/drawable-xhdpi/ic_activity_main_search.png

BuWanVideo/res/drawable-xhdpi/ic_recommend_watch_history.png

BuWanVideo/res/drawable-xhdpi/icon_dialog_vip_new_item_input.png
BuWanVideo/res/drawable-xhdpi/icon_vip_dialog_close_new.png
BuWanVideo/res/drawable/shape_dialog_user_protocol_positive.xml
@@ -2,5 +2,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="40dp" />
    <solid android:color="#4bb000" />
    <solid android:color="@color/nav_highloght_text_color" />
</shape>
BuWanVideo/res/drawable/shape_feedback_input_bg.xml
@@ -2,5 +2,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="5dp" />
    <solid android:color="#ff6a6a6a" />
    <solid android:color="@color/common_bg_color" />
</shape>
BuWanVideo/res/drawable/shape_mine_functions_bg.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/mine_item_container_bg_color" />
    <corners android:radius="5dp" />
    <corners android:radius="8dp" />
</shape>
BuWanVideo/res/drawable/shape_new_dialog_vip_bg.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners
        android:topLeftRadius="20dp"
        android:topRightRadius="20dp" />
    <solid android:color="@color/vip_dialog_bg_color" />
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_bg.xml
@@ -4,7 +4,18 @@
    <solid android:color="#ffffffff" />
    <stroke
        android:width="1dp"
        android:color="#59000000"></stroke>
    <corners android:radius="16dp" />
        android:color="#59bbbbbb" />
    <corners
        android:bottomLeftRadius="16dp"
        android:bottomRightRadius="16dp"
        android:topLeftRadius="16dp"
        android:topRightRadius="16dp" />
    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp"></padding>
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_bottom_item_bg.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white"></solid>
    <corners
        android:bottomLeftRadius="16dp"
        android:bottomRightRadius="16dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="0dp" />
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_bottom_item_selected_bg.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#F0F0F0"></solid>
    <corners
        android:bottomLeftRadius="16dp"
        android:bottomRightRadius="16dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="0dp" />
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_middle_item_bg.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white"></solid>
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_middle_item_selected_bg.xml
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#F0F0F0"></solid>
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_single_item_bg.xml
New file
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white"></solid>
    <corners
        android:bottomLeftRadius="16dp"
        android:bottomRightRadius="16dp"
        android:topLeftRadius="16dp"
        android:topRightRadius="16dp" />
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_single_item_selected_bg.xml
New file
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#F0F0F0"></solid>
    <corners
        android:bottomLeftRadius="16dp"
        android:bottomRightRadius="16dp"
        android:topLeftRadius="16dp"
        android:topRightRadius="16dp" />
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_top_item_bg.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white"></solid>
    <corners
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:topLeftRadius="16dp"
        android:topRightRadius="16dp" />
</shape>
BuWanVideo/res/drawable/shape_video_detail_resource_top_item_selected_bg.xml
New file
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#F0F0F0"></solid>
    <corners
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:topLeftRadius="16dp"
        android:topRightRadius="16dp" />
</shape>
BuWanVideo/res/layout/activity_feedback.xml
@@ -23,8 +23,8 @@
            android:lines="7"
            android:maxLength="500"
            android:padding="12dp"
            android:textColor="#CBCBCB"
            android:textColorHint="#CBCBCB"></EditText>
            android:textColor="#666666"
            android:textColorHint="#666666"></EditText>
        <TextView
            android:id="@+id/tv_count"
BuWanVideo/res/layout/activity_main.xml
@@ -11,12 +11,14 @@
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@color/page_header_bg_color"
        android:gravity="center_vertical">
        android:gravity="center_vertical"
        android:paddingTop="8dp"
        android:paddingBottom="8dp">
        <LinearLayout
            android:id="@+id/ll_activity_main_search"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="8dp"
            android:layout_weight="2"
            android:background="@drawable/shape_search_bg"
@@ -25,11 +27,10 @@
            <ImageView
                android:id="@+id/iv_activity_main_search"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:layout_gravity="left|center_vertical"
                android:layout_marginLeft="8dp"
                android:padding="4dp"
                android:scaleType="fitCenter"
                android:src="@drawable/ic_activity_main_search"></ImageView>
@@ -151,8 +152,8 @@
                <ImageView
                    android:id="@+id/iv_activity_main_download"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_width="18dp"
                    android:layout_height="18dp"
                    android:layout_gravity="center"
                    android:layout_margin="5dp"
                    android:layout_toLeftOf="@id/iv_activity_main_search"
BuWanVideo/res/layout/browser_fengxing_activity.xml
@@ -120,7 +120,7 @@
                        android:padding="9dp"
                        android:text="刷新"
                        android:textColor="#ff666666"
                        android:textSize="15sp" />
                        android:textSize="14sp" />
                    <TextView
                        android:id="@+id/tv_copy"
@@ -131,7 +131,7 @@
                        android:padding="9dp"
                        android:text="复制链接"
                        android:textColor="#ff666666"
                        android:textSize="15sp" />
                        android:textSize="14sp" />
                    <TextView
                        android:id="@+id/tv_open"
@@ -144,7 +144,7 @@
                        android:paddingBottom="9dp"
                        android:text="用其他浏览器打开"
                        android:textColor="#ff666666"
                        android:textSize="15sp" />
                        android:textSize="14sp" />
                </LinearLayout>
BuWanVideo/res/layout/dialog_vip_new.xml
New file
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@drawable/shape_new_dialog_vip_bg"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="9dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="11dp"
            android:layout_marginBottom="20dp"
            android:text="购买详情"
            android:textColor="@color/vip_dialog_title_text_color"
            android:textSize="18sp" />
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@color/vip_dialog_cutline_bg_color">
        </View>
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="20dp"
            android:paddingRight="5dp"
            android:paddingBottom="20dp">
            <TextView
                android:id="@+id/tv_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left|bottom"
                android:text="片名《流浪地球》"
                android:textColor="@color/vip_dialog_title_text_color"
                android:textSize="18sp" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right|bottom"
                android:text="来源:PP视频"
                android:textColor="#999999"
                android:textSize="13sp" />
        </FrameLayout>
        <LinearLayout
            android:id="@+id/ll_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
        </LinearLayout>
    </LinearLayout>
    <ImageView
        android:id="@+id/iv_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|top"
        android:src="@drawable/icon_vip_dialog_close_new"></ImageView>
</FrameLayout>
BuWanVideo/res/layout/dialog_vip_new_item.xml
New file
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:gravity="center_vertical"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginLeft="16.5dp"
        android:layout_marginRight="6dp"></ImageView>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="VIP看高清 免广告"
            android:textSize="15sp" />
        <TextView
            android:id="@+id/tv_subtitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="包月、季、年卡"
            android:textSize="11sp" />
    </LinearLayout>
    <TextView
        android:id="@+id/tv_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="13.5dp"
        android:drawableRight="@drawable/icon_dialog_vip_new_item_input"
        android:drawablePadding="6.5dp"
        android:text="¥6~¥99"
        android:textSize="20sp" />
</LinearLayout>
BuWanVideo/res/layout/fav_item.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#5C5C5C"
    android:background="@color/page_content_bg_color"
    android:descendantFocusability="blocksDescendants"
    android:gravity="center_vertical"
    android:orientation="horizontal">
@@ -34,49 +35,77 @@
            android:background="@android:color/transparent" />
    </FrameLayout>
    <RelativeLayout
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:orientation="horizontal"
        android:padding="8dp">
        <ImageView
            android:id="@+id/iv_cover"
            android:layout_width="100dp"
            android:layout_height="75dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:scaleType="centerCrop" />
        <TextView
            android:id="@+id/tv_title"
            style="@style/TextGrayNormal"
            android:layout_width="wrap_content"
        <com.lcjian.library.widget.RatioLayout
            android:id="@+id/rl_picture"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignTop="@id/iv_cover"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginEnd="32dp"
            android:layout_marginRight="32dp"
            android:layout_toEndOf="@id/iv_cover"
            android:layout_toRightOf="@id/iv_cover"
            android:ellipsize="end"
            android:lines="2"
            android:textColor="@color/white" />
            android:layout_weight="120"
            app:ratio="0.562">
        <TextView
            android:id="@+id/tv_watch_time"
            style="@style/TextGrayNormal"
            android:layout_width="wrap_content"
            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <ImageView
                    android:id="@+id/iv_cover"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentLeft="true"
                    android:scaleType="fitXY" />
            </FrameLayout>
        </com.lcjian.library.widget.RatioLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/iv_cover"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_toEndOf="@id/iv_cover"
            android:layout_toRightOf="@id/iv_cover"
            android:ellipsize="end"
            android:lines="1"
            android:textColor="@color/white" />
    </RelativeLayout>
            android:layout_weight="170"
            android:orientation="vertical">
            <TextView
                android:id="@+id/tv_title"
                style="@style/TextGrayNormal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@id/iv_cover"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginEnd="32dp"
                android:layout_marginRight="32dp"
                android:layout_toEndOf="@id/iv_cover"
                android:layout_toRightOf="@id/iv_cover"
                android:ellipsize="end"
                android:lines="2"
                android:textColor="@color/item_title_text_color" />
            <TextView
                android:id="@+id/tv_watch_time"
                style="@style/TextGrayNormal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@id/iv_cover"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_toEndOf="@id/iv_cover"
                android:layout_toRightOf="@id/iv_cover"
                android:ellipsize="end"
                android:lines="1"
                android:textColor="@color/item_title_text_color" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
BuWanVideo/res/layout/item_album_list_ad.xml
@@ -18,6 +18,7 @@
            <com.lcjian.library.widget.RatioLayout
                android:id="@+id/rl_picture"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="95"
@@ -31,7 +32,7 @@
                        android:id="@+id/iv_picture"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:scaleType="centerCrop"></ImageView>
                        android:scaleType="fitXY"></ImageView>
                </FrameLayout>
BuWanVideo/res/layout/item_movie.xml
@@ -104,7 +104,7 @@
            style="@style/TextBlackSmall"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5.5dp"
            android:layout_marginTop="3dp"
            android:ellipsize="end"
            android:lines="1"
            android:paddingRight="8dp"
BuWanVideo/res/layout/item_recommend_home_type.xml
@@ -21,14 +21,13 @@
            android:layout_height="wrap_content"
            android:layout_marginLeft="4dp"
            android:paddingTop="8dp"
            android:gravity="center_vertical"
            android:paddingBottom="8dp">
            <TextView
                android:id="@+id/tv_category_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@id/tv_category_icon"
                android:layout_weight="1"
                android:text="什么鬼"
                android:textColor="@color/item_title_text_color"
@@ -39,9 +38,6 @@
                android:id="@+id/tv_tag_refresh"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@drawable/shape_item_tag_bg"
                android:drawableLeft="@drawable/icon_item_refresh"
                android:drawablePadding="6.5dp"
@@ -52,15 +48,12 @@
                android:text="换一批"
                android:textColor="@color/item_tag_text_color"
                android:textSize="10sp"
                android:visibility="gone" />
                android:visibility="visible" />
            <TextView
                android:id="@+id/tv_more"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@drawable/shape_item_tag_bg"
                android:drawableRight="@drawable/ic_home_type_more"
                android:drawablePadding="6.5dp"
BuWanVideo/res/layout/item_video_search_result_album.xml
@@ -34,6 +34,7 @@
            android:drawablePadding="3.5dp"
            android:gravity="center"
            android:text="更多"
            android:textColor="#666666"
            android:textSize="12sp" />
@@ -45,6 +46,7 @@
        <com.lcjian.library.widget.RatioLayout
            android:id="@+id/rl_picture"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="95"
@@ -58,7 +60,7 @@
                    android:id="@+id/iv_picture"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:scaleType="centerCrop"></ImageView>
                    android:scaleType="fitXY"></ImageView>
                <ImageView
@@ -110,7 +112,7 @@
                <TextView
                    android:id="@+id/tv_score"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_height="20dp"
                    android:layout_marginLeft="5dp"
                    android:ellipsize="end"
                    android:maxLines="2"
BuWanVideo/res/layout/item_video_search_result_video.xml
@@ -9,9 +9,10 @@
    <com.lcjian.library.widget.RatioLayout
        android:layout_width="0dp"
        android:id="@+id/rl_picture"
        android:layout_height="wrap_content"
        android:layout_weight="120"
        app:ratio="0.6667">
        app:ratio="0.562">
        <FrameLayout
            android:layout_width="match_parent"
@@ -23,7 +24,7 @@
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:scaleType="centerCrop" />
                android:scaleType="fitXY" />
            <ImageView
                android:id="@+id/iv_vip"
BuWanVideo/res/layout/mine_fragment.xml
@@ -33,7 +33,7 @@
                    android:background="@drawable/ic_mine_bg_white"
                    android:orientation="vertical"
                    android:paddingTop="40dp"
                    android:paddingBottom="20dp">
                    android:paddingBottom="8.5dp">
                    <LinearLayout
                        android:id="@+id/mine_rl_head"
@@ -121,6 +121,9 @@
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="12dp"
                        android:layout_marginRight="12dp"
                        android:paddingTop="12dp"
                        android:paddingBottom="12dp"
                        android:background="@drawable/shape_mine_functions_bg"
                        android:orientation="horizontal">
@@ -241,7 +244,10 @@
                android:id="@+id/ll_vip"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="12dp"
                android:layout_marginTop="0dp"
                android:layout_marginLeft="12dp"
                android:layout_marginRight="12dp"
                android:background="@drawable/shape_vip_bg"
                android:gravity="center_vertical"
                android:orientation="horizontal"
BuWanVideo/res/layout/mvideo_activity.xml
@@ -51,8 +51,8 @@
                <ImageView
                    android:id="@+id/iv_recommend_watch_history"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_width="18dp"
                    android:layout_height="18dp"
                    android:layout_gravity="center"
                    android:layout_margin="8dp"
                    android:scaleType="fitCenter"
@@ -68,8 +68,8 @@
                <ImageView
                    android:id="@+id/iv_activity_main_search"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_width="18dp"
                    android:layout_height="18dp"
                    android:layout_gravity="center"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="8dp"
BuWanVideo/res/layout/search_actvity.xml
@@ -28,11 +28,10 @@
                <ImageView
                    android:id="@+id/iv_activity_main_search"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_width="18dp"
                    android:layout_height="18dp"
                    android:layout_gravity="left|center_vertical"
                    android:layout_marginLeft="11dp"
                    android:padding="4dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/ic_activity_main_search"></ImageView>
BuWanVideo/res/layout/search_result_activity.xml
@@ -26,11 +26,10 @@
            <ImageView
                android:id="@+id/iv_activity_main_search"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:layout_gravity="left|center_vertical"
                android:layout_marginLeft="11dp"
                android:padding="4dp"
                android:scaleType="fitCenter"
                android:src="@drawable/ic_activity_main_search"></ImageView>
@@ -90,6 +89,7 @@
                    android:layout_height="wrap_content"
                    android:background="@color/page_content_bg_color"
                    android:paddingLeft="10dp"
                    android:paddingTop="10dp"
                    android:paddingRight="10dp"></android.support.v7.widget.RecyclerView>
            </com.weikou.beibeivideo.widget.MySwipeRefreshLayout>
@@ -111,7 +111,7 @@
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="12dp"
                    android:text="抱歉,暂未搜索到相关内容..."
                    android:text="抱歉,暂未搜索到相关内容"
                    android:textColor="@color/list_empty_default_text_color"></TextView>
BuWanVideo/res/layout/search_result_top_bar.xml
@@ -5,8 +5,7 @@
    android:background="@color/page_content_bg_color"
    android:orientation="horizontal"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:paddingBottom="12dp">
    android:paddingRight="8dp">
    <HorizontalScrollView
        android:layout_width="match_parent"
BuWanVideo/res/layout/watch_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/page_content_bg_color"
@@ -34,78 +35,68 @@
            android:background="@android:color/transparent" />
    </FrameLayout>
    <RelativeLayout
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:orientation="horizontal"
        android:padding="8dp"
        android:tag="front">
        <ImageView
            android:id="@+id/iv_cover"
            android:layout_width="100dp"
            android:layout_height="63dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:scaleType="centerCrop" />
        <TextView
            android:id="@+id/tv_title"
            style="@style/TextGrayNormal"
            android:layout_width="wrap_content"
        <com.lcjian.library.widget.RatioLayout
            android:id="@+id/rl_picture"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignTop="@id/iv_cover"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:layout_toEndOf="@id/iv_cover"
            android:layout_toRightOf="@id/iv_cover"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="@color/item_title_text_color" />
            android:layout_weight="120"
            app:ratio="0.562">
        <TextView
            android:id="@+id/tv_watch_time"
            style="@style/TextGrayNormal"
            android:layout_width="wrap_content"
            <ImageView
                android:id="@+id/iv_cover"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:scaleType="fitXY" />
        </com.lcjian.library.widget.RatioLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/iv_cover"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_toEndOf="@id/iv_cover"
            android:layout_toRightOf="@id/iv_cover"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="@color/item_title_text_color" />
            android:layout_weight="170"
            android:orientation="vertical">
        <!--        <FrameLayout
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_alignParentEnd="true"
                   android:layout_alignParentRight="true"
                   android:layout_centerVertical="true" >
            <TextView
                android:id="@+id/tv_title"
                style="@style/TextGrayNormal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:layout_toEndOf="@id/iv_cover"
                android:layout_toRightOf="@id/iv_cover"
                android:ellipsize="end"
                android:maxLines="1"
                android:textColor="@color/item_title_text_color" />
                   <CheckBox
                       android:id="@+id/chb_watch_history"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:layout_gravity="center"
                       android:background="@null"
                       android:button="@null"
                       android:drawableLeft="@drawable/selector_checkbox"
                       android:drawableStart="@drawable/selector_checkbox" />
                   <ImageButton
                       android:id="@+id/btn_status"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:layout_alignParentEnd="true"
                       android:layout_alignParentRight="true"
                       android:layout_centerVertical="true"
                       android:background="@android:color/transparent" />
               </FrameLayout> -->
    </RelativeLayout>
            <TextView
                android:id="@+id/tv_watch_time"
                style="@style/TextGrayNormal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:ellipsize="end"
                android:maxLines="1"
                android:textColor="@color/item_title_text_color" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
BuWanVideo/res/values/colors.xml
@@ -103,7 +103,7 @@
    <!--视频颜色 -->
    <color name="video_list_title_text_color">#000000</color>
    <color name="video_list_subtitle_text_color">#9FA5B3</color>
    <color name="video_list_tag_text_color">#C0C0C0</color>
    <color name="video_list_tag_text_color">#ffffff</color>
    <color name="video_list_score_text_color">#f8dc9f</color>
    <color name="video_episode_text_color">#232323</color>
    <color name="video_episode_bg_color">#EFEFEF</color>
@@ -147,5 +147,12 @@
    <color name="video_list_nav_text_color">#717481</color>
    <color name="video_list_nav_bg_color">#FFFFFF</color>
    <color name="common_bg_color">#E8E8E8</color>
    <color name="vip_dialog_bg_color">#FFFFFF</color>
    <color name="vip_dialog_title_text_color">#010101</color>
    <color name="vip_dialog_mark_text_color">#999999</color>
    <color name="vip_dialog_cutline_bg_color">#CDCDCD</color>
</resources>
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoAPI.java
@@ -1333,6 +1333,29 @@
    }
    /**
     * 付费视频的购买活动
     *
     * @param context
     * @param cid
     * @param vid
     * @param handler
     */
    public static void getPPTVVIPVideoActivity(Context context, String url, String cid, String vid,
                                               ResponseHandlerInterface handler) {
        String loginUid = UserUtil.getLoginUid(context);
        LinkedHashMap<String, String> params = new LinkedHashMap<>();
        if (loginUid != null)
            params.put("loginUid", loginUid);
        if (url != null) {
            params.put("url", url);
        }
        params.put("cid", cid);
        params.put("vid", vid);
        commonPost(context, BASE_URL + "video/play/getPPTVVIPVideoActivity", params, handler);
    }
    public static LinkedHashMap<String, String> validateParams(
            LinkedHashMap<String, String> params, Context context) {
        params.put("System", "1");
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoApplication.java
@@ -306,16 +306,22 @@
                ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
                if (!cn.getClassName().equalsIgnoreCase(SplashActivity.class.getName())) {
                    Log.i(TAG, "应当展示开屏广告");
                    //小于30分钟不展示
                    if (System.currentTimeMillis() - SplashADFragment.lastShowTime < 1000 * 60 * 30L)
                        return;
                    // 测试
//                    if (System.currentTimeMillis() - SplashADFragment.lastShowTime < 1000 * 60 * 30L)
//                        return;
                    if (SplashADFragment.isAdLoaded()) {
                        startActivity(new Intent(getApplicationContext(), SplashAdActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                        return;
                    }
                    AdUtil.AD_TYPE type1 = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.splashHotStart);
                    AdUtil.AD_TYPE type1 =AdUtil.getAdType(getApplicationContext(), AdPositionEnum.splashHotStart);
                    String pid1 = AdUtil.getAdPid(getApplicationContext(), AdPositionEnum.splashHotStart);
                    AdPidInfo adPidInfo1 = null;
                    AdPidInfo adPidInfo2 = null;
                    if (type1 != null) {
BuWanVideo/src/com/weikou/beibeivideo/entity/VideoInfo.java
@@ -401,7 +401,7 @@
        this.director = director;
    }
    public static class VideoAlbumMoreInfo {
    public static class VideoAlbumMoreInfo implements Serializable{
        private String name;
        private int jumpPosition;
BuWanVideo/src/com/weikou/beibeivideo/entity/vo/PPTVVideoActivityInfoVO.java
New file
@@ -0,0 +1,25 @@
package com.weikou.beibeivideo.entity.vo;
import java.util.List;
public class PPTVVideoActivityInfoVO {
    private List<PPTVWatchVIPVideoActivityWay> wayList;
    private String videoName;
    public List<PPTVWatchVIPVideoActivityWay> getWayList() {
        return wayList;
    }
    public void setWayList(List<PPTVWatchVIPVideoActivityWay> wayList) {
        this.wayList = wayList;
    }
    public String getVideoName() {
        return videoName;
    }
    public void setVideoName(String videoName) {
        this.videoName = videoName;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/entity/vo/PPTVWatchVIPVideoActivityWay.java
New file
@@ -0,0 +1,112 @@
package com.weikou.beibeivideo.entity.vo;
import com.weikou.beibeivideo.entity.JumpDetail;
/**
 * 观看VIP视频的活动
 */
public class PPTVWatchVIPVideoActivityWay {
    private String title;
    private String subTitle;
    private String icon;
    private String textColor;
    private String startBgColor;
    private String endBgColor;
    private String startPrice;
    private String endPrice;
    private String type;
    //跳转相关参数
    private JumpDetail jumpDetail;
    private String params;
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public JumpDetail getJumpDetail() {
        return jumpDetail;
    }
    public void setJumpDetail(JumpDetail jumpDetail) {
        this.jumpDetail = jumpDetail;
    }
    public String getParams() {
        return params;
    }
    public void setParams(String params) {
        this.params = params;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSubTitle() {
        return subTitle;
    }
    public void setSubTitle(String subTitle) {
        this.subTitle = subTitle;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
    public String getTextColor() {
        return textColor;
    }
    public void setTextColor(String textColor) {
        this.textColor = textColor;
    }
    public String getStartBgColor() {
        return startBgColor;
    }
    public void setStartBgColor(String startBgColor) {
        this.startBgColor = startBgColor;
    }
    public String getEndBgColor() {
        return endBgColor;
    }
    public void setEndBgColor(String endBgColor) {
        this.endBgColor = endBgColor;
    }
    public String getStartPrice() {
        return startPrice;
    }
    public void setStartPrice(String startPrice) {
        this.startPrice = startPrice;
    }
    public String getEndPrice() {
        return endPrice;
    }
    public void setEndPrice(String endPrice) {
        this.endPrice = endPrice;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/BaseActivity.java
@@ -77,7 +77,7 @@
//        if (res.getConfiguration().fontScale != 1) {//非默认值
        Configuration newConfig = new Configuration();
        newConfig.setToDefaults();//设置默认
        newConfig.fontScale = 1.0f;
        newConfig.fontScale = 1.1f;
        res.updateConfiguration(newConfig, res.getDisplayMetrics());
//        }
        return res;
BuWanVideo/src/com/weikou/beibeivideo/ui/ad/SplashADFragment.java
@@ -109,7 +109,7 @@
    private Timer timer;
    private int leftTime = 5;
    public boolean showAd() {
    public boolean showAd(boolean vclick) {
        if (isAdLoaded()) {
            //穿山甲广告
            if (adLoadInfo.getCsjAd() != null) {
@@ -159,8 +159,14 @@
                                    public void run() {
                                        if (ad_close_time != null)
                                            ad_close_time.setVisibility(View.GONE);
                                        if (ll_input != null)
                                            ll_input.setClickable(true);
                                        if (vclick) {
                                            if (ll_input != null)
                                                ll_input.setClickable(true);
                                        } else {
                                            if (mAdShowListener != null)
                                                mAdShowListener.onClose();
                                        }
                                    }
                                });
@@ -176,7 +182,9 @@
                                            ad_close_time.setText(leftTime + "");
                                    }
                                });
                            ll_input.setClickable(false);
                            if (vclick) {
                                ll_input.setClickable(false);
                            }
                        }
                    }
                }, 1000, 1000);
@@ -226,7 +234,7 @@
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View root = LayoutInflater.from(getContext()).inflate(R.layout.fragment_splash_ad, null);
        initView(root);
        if (!showAd()) {
        if (!showAd(Math.random() < 0.1f ? true : false)) {
            Bundle arguments = getArguments();
            AdPidInfo adPidInfo1 = null;
            AdPidInfo adPidInfo2 = null;
@@ -239,7 +247,7 @@
                @Override
                public void onAdLoad(SplashAdLoadInfo adLoadInfo) {
                    showAd();
                    showAd(false);
                }
                @Override
BuWanVideo/src/com/weikou/beibeivideo/ui/common/ListVideoAdapter.java
@@ -15,7 +15,10 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.util.glide.GlideRoundTransform;
import com.lcjian.library.widget.RatioLayout;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
@@ -98,6 +101,10 @@
                    .findViewById(R.id.tv_title);
            viewHolder.tv_movie_rating = (TextView) convertView
                    .findViewById(R.id.tv_watch_time);
            viewHolder.rl_picture = convertView
                    .findViewById(R.id.rl_picture);
            viewHolder.fl_video_select = (FrameLayout) convertView
                    .findViewById(R.id.fl_video_select);
            viewHolder.chb_delete = (CheckBox) convertView
@@ -114,14 +121,22 @@
        final String thirdtype = videoInfo.getThirdType();
        // imageLoader.displayImage(videoInfo.getPicture(),
        // viewHolder.iv_movie_cover);// GridVideoAdapter
        try {
            glide.load(videoInfo.getPicture())
                    .placeholder(R.drawable.ic_default_cover)
                    .error(R.drawable.ic_default_cover)
                    .into(viewHolder.iv_movie_cover);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
        viewHolder.rl_picture.setTag(videoInfo.getPicture());
        viewHolder.rl_picture.post(new Runnable() {
            @Override
            public void run() {
                try {
                    glide.load(viewHolder.rl_picture.getTag() + "").apply(new RequestOptions().centerCrop())
                            .transform(new GlideRoundTransform(context, 6))
                            .placeholder(R.drawable.shape_video_list_cover_placeholder)
                            .error(R.drawable.shape_video_list_cover_placeholder)
                            .into(viewHolder.iv_movie_cover);
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
            }
        });
        viewHolder.tv_movie_title.setText(videoInfo.getName());
        viewHolder.tv_movie_rating.setText(StringUtils.isBlank(videoInfo
                .getTag()) ? "" : videoInfo.getTag());
@@ -185,6 +200,7 @@
        ImageView iv_movie_cover;
        TextView tv_movie_title;
        TextView tv_movie_rating;
        RatioLayout rl_picture;
        private FrameLayout fl_video_select;
        private CheckBox chb_delete;
BuWanVideo/src/com/weikou/beibeivideo/ui/dialog/VIPNewDialog.java
New file
@@ -0,0 +1,178 @@
package com.weikou.beibeivideo.ui.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.AbsoluteSizeSpan;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.alibaba.fastjson.JSONObject;
import com.androidquery.AQuery;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.vo.PPTVWatchVIPVideoActivityWay;
import com.weikou.beibeivideo.util.DimenUtils;
import com.weikou.beibeivideo.util.JumpActivityUtil;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import java.util.List;
/**
 * vip弹框
 */
public class VIPNewDialog extends Dialog {
    private static String TAG = VIPNewDialog.class.getName();
    public VIPNewDialog(Context context) {
        super(context);
        this.setCancelable(false);
    }
    public VIPNewDialog(Context context, int theme) {
        super(context, theme);
        this.setCancelable(false);
    }
    public static class Builder {
        private Activity context;
        public Builder(Activity context) {
            this.context = context;
        }
        private View.OnClickListener closeListener;
        private ItemClickListener itemClickListener;
        private List<PPTVWatchVIPVideoActivityWay> activityList;
        private String videoName;
        public Builder setCloseListener(View.OnClickListener listener) {
            this.closeListener = listener;
            return this;
        }
        public Builder setItemClickListener(ItemClickListener listener) {
            this.itemClickListener = listener;
            return this;
        }
        public Builder setActivityData(List<PPTVWatchVIPVideoActivityWay> activityList, String videoName) {
            this.activityList = activityList;
            this.videoName = videoName;
            return this;
        }
        public VIPNewDialog create() {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final VIPNewDialog dialog = new VIPNewDialog(context, R.style.Dialog);
            dialog.setCanceledOnTouchOutside(true);
            final View layout = inflater.inflate(R.layout.dialog_vip_new, null);
            ImageView iv_close = layout.findViewById(R.id.iv_close);
            TextView tv_name = layout.findViewById(R.id.tv_name);
            SpannableString spannableString = new SpannableString("片名" + videoName);
            spannableString.setSpan(new AbsoluteSizeSpan(com.lcjian.library.util.common.DimenUtils.spToPixels(12, context)), 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            tv_name.setText(spannableString);
            LinearLayout ll_container = layout.findViewById(R.id.ll_container);
            for (PPTVWatchVIPVideoActivityWay vo : activityList) {
                addItem(ll_container, vo, inflater, context);
            }
            iv_close.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (closeListener != null)
                        closeListener.onClick(v);
                }
            });
            dialog.setContentView(layout);
            WindowManager.LayoutParams params = dialog.getWindow()
                    .getAttributes();
            params.width = WindowManager.LayoutParams.MATCH_PARENT;
            params.height = WindowManager.LayoutParams.WRAP_CONTENT;
            dialog.getWindow().setAttributes(params);
            dialog.getWindow().setGravity(Gravity.BOTTOM);
            return dialog;
        }
        private void addItem(LinearLayout ll_container, PPTVWatchVIPVideoActivityWay vo, LayoutInflater inflater, Activity context) {
            View view = inflater.inflate(R.layout.dialog_vip_new_item, null);
            AQuery mAquery = new AQuery(view);
            mAquery.id(R.id.tv_title).text(vo.getTitle());
            mAquery.id(R.id.tv_subtitle).text(vo.getSubTitle());
            String price = "";
            if (!StringUtils.isNullOrEmpty(vo.getStartPrice())) {
                price += "¥" + vo.getStartPrice();
            }
            if (!StringUtils.isNullOrEmpty(vo.getEndPrice())) {
                price += "~¥" + vo.getEndPrice();
            }
            if (price.length() > 0) {
                SpannableString priceString = new SpannableString(price);
                for (int i = 0; i < price.length(); i++) {
                    if ((price.charAt(i) + "").equals("¥")) {
                        priceString.setSpan(new AbsoluteSizeSpan(com.lcjian.library.util.common.DimenUtils.spToPixels(10, context)), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                    }
                }
                mAquery.id(R.id.tv_price).text(priceString);
            }
            mAquery.id(R.id.tv_title).textColor(Color.parseColor(vo.getTextColor()));
            mAquery.id(R.id.tv_subtitle).textColor(Color.parseColor(vo.getTextColor()));
            mAquery.id(R.id.tv_price).textColor(Color.parseColor(vo.getTextColor()));
            mAquery.id(R.id.iv_icon).image(vo.getIcon());
            GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
                    new int[]{Color.parseColor(vo.getStartBgColor()), Color.parseColor(vo.getEndBgColor())});
            gd.setCornerRadius(DimenUtils.dip2px(context, 6));
            view.setBackground(gd);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, DimenUtils.dip2px(context, 60));
            lp.setMargins(0, 0, 0, DimenUtils.dip2px(context, 10));
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (itemClickListener != null)
                        itemClickListener.onClick(vo);
                }
            });
            ll_container.addView(view, lp);
        }
    }
    public interface MeasureCallBack {
        public void onMeasure(int height);
    }
    public interface ItemClickListener {
        public void onClick(PPTVWatchVIPVideoActivityWay way);
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MineFragment.java
@@ -49,6 +49,7 @@
import com.weikou.beibeivideo.ui.mine.SystemMessageActivity;
import com.weikou.beibeivideo.ui.mine.WatchHistoryActivity;
import com.weikou.beibeivideo.ui.recommend.SearchActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.ConfigUtil;
import com.weikou.beibeivideo.util.UserUtil;
import com.weikou.beibeivideo.widget.BadgeView;
@@ -270,8 +271,8 @@
                break;
            case R.id.rl_mine_about_us:
                Intent intent1 = new Intent(getContext(), BrowserActivity.class);
//                intent1.putExtra("url", BeibeiConstant.ABOUT_US);
                intent1.putExtra("url", "https://www.iqiyi.com/v_fuudooxv8k.html");
                intent1.putExtra("url", BeibeiConstant.ABOUT_US);
//                intent1.putExtra("url", "https://www.iqiyi.com/v_fuudooxv8k.html");
                startActivity(intent1);
                break;
            case R.id.rl_mine_settings:
BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java
@@ -713,7 +713,6 @@
                    com.weikou.beibeivideo.util.DimenUtils.dip2px(getContext(), 120),
                    android.view.WindowManager.LayoutParams.WRAP_CONTENT);
            popupWindow.setOutsideTouchable(true);// 点击外部可点击
            popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_video_detail_resource_bg));
            popupWindow.setAnimationStyle(R.style.PopupAnimation);
            popupWindow.setFocusable(true);// 获取焦点
@@ -804,6 +803,22 @@
            } else {
                tv.setText(reList.get(position).getName());
            }
            int background = 0;
            if (reList.size() <= 1) {
                background = reList.get(position).isChecked() ? R.drawable.shape_video_detail_resource_single_item_selected_bg : R.drawable.shape_video_detail_resource_single_item_bg;
            } else {
                if (position == 0) {
                    background = reList.get(position).isChecked() ? R.drawable.shape_video_detail_resource_top_item_selected_bg : R.drawable.shape_video_detail_resource_top_item_bg;
                } else if (position == reList.size() - 1) {
                    background = reList.get(position).isChecked() ? R.drawable.shape_video_detail_resource_bottom_item_selected_bg : R.drawable.shape_video_detail_resource_bottom_item_bg;
                } else {
                    background = reList.get(position).isChecked() ? R.drawable.shape_video_detail_resource_middle_item_selected_bg : R.drawable.shape_video_detail_resource_middle_item_bg;
                }
            }
            view.setBackgroundResource(background);
            return view;
        }
    }
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/PPTVPlayFragment.java
@@ -6,7 +6,6 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Build;
@@ -22,7 +21,6 @@
import android.webkit.ConsoleMessage;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@@ -33,6 +31,7 @@
import android.widget.Toast;
import com.androidquery.AQuery;
import com.google.gson.Gson;
import com.lcjian.library.RetainViewFragment;
import com.lcjian.library.dialog.DialogUtil;
import com.lcjian.library.util.SingleToast;
@@ -46,16 +45,17 @@
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.PlayVideoPreADSetting;
import com.weikou.beibeivideo.entity.ad.RewardVideoAdContainer;
import com.weikou.beibeivideo.entity.vo.PPTVVideoActivityInfoVO;
import com.weikou.beibeivideo.entity.vo.PPTVWatchVIPVideoActivityWay;
import com.weikou.beibeivideo.ui.ad.PlayVideoPreADFragment;
import com.weikou.beibeivideo.ui.dialog.JumpVideoLoadingDialog;
import com.weikou.beibeivideo.ui.dialog.LoadingDialogUtil;
import com.weikou.beibeivideo.ui.dialog.VIPDialog;
import com.weikou.beibeivideo.ui.dialog.VIPNewDialog;
import com.weikou.beibeivideo.ui.login.LoginActivity;
import com.weikou.beibeivideo.ui.main.MainActivity;
import com.weikou.beibeivideo.ui.video.VideoPlayerBrowserActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.ConfigUtil;
import com.weikou.beibeivideo.util.DimenUtils;
import com.weikou.beibeivideo.util.JumpActivityUtil;
import com.weikou.beibeivideo.util.UmengEventUtil;
import com.weikou.beibeivideo.util.UserUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
@@ -69,7 +69,9 @@
import org.apache.http.Header;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PPTVPlayFragment extends RetainViewFragment implements OnClickListener {
@@ -99,7 +101,7 @@
    private AQuery query;
    private void getPPVideoInfo(String url) {
    private String[] getPPVideoInfo(String url) {
        if (url.contains("cid=") && url.contains("vid=")) {
            String[] sts = url.split("\\?");
            if (sts.length > 1) {
@@ -107,20 +109,17 @@
                String[] ps = params.split("&");
                Map<String, String> map = new HashMap<>();
                for (String p : ps) {
                    map.put(p.split("=")[0], p.split("=")[1]);
                    map.put(p.split("=")[0], p.split("=").length > 1 ? p.split("=")[1] : "");
                }
                String cid = map.get("cid");
                String vid = map.get("vid");
                //PPTV播放上传
                BeibeiVideoAPI.uploadPPTVPlayRecord(getContext(), cid, vid, new BasicTextHttpResponseHandler() {
                    @Override
                    public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
                    }
                });
                return new String[]{cid, vid};
            }
        }
        return null;
    }
    private void initWebView(View view) {
@@ -135,7 +134,16 @@
                }
                try {
                    getPPVideoInfo(url);
                    String[] cvid = getPPVideoInfo(url);
                    if (cvid != null && cvid.length > 1) {
                        //PPTV播放上传
                        BeibeiVideoAPI.uploadPPTVPlayRecord(getContext(), cvid[0], cvid[1], new BasicTextHttpResponseHandler() {
                            @Override
                            public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
                            }
                        });
                    }
                } catch (Exception e) {
                }
@@ -177,7 +185,7 @@
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                tv_url.setText(view.getUrl());
                tv_title.setText(title);
//                tv_title.setText(title);
            }
            /**
@@ -252,8 +260,9 @@
                        @Override
                        public void run() {
                            getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                            if (vipDialog != null && !vipDialog.isShowing())
                                vipDialog.show();
//                            if (vipDialog != null && !vipDialog.isShowing())
//                                vipDialog.show();
                            getActivityInfo(tv_url.getText() + "");
                        }
                    });
@@ -315,6 +324,62 @@
        }
    }
    private VIPNewDialog vipNewDialog;
    private synchronized void getActivityInfo(String url) {
        String cid = "";
        String vid = "";
        try {
            String[] cvids = getPPVideoInfo(url);
            if (cvids != null && cvids.length > 1) {
                cid = cvids[0];
                vid = cvids[1];
            }
        } catch (Exception e) {
        }
        DialogUtil.dismiss(vipNewDialog);
        BeibeiVideoAPI.getPPTVVIPVideoActivity(getContext(), url, cid, vid, new BasicTextHttpResponseHandler() {
            @Override
            public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
                if (jsonObject.optBoolean("IsPost")) {
                    JSONObject data = jsonObject.optJSONObject("Data");
                    PPTVVideoActivityInfoVO vo = new Gson().fromJson(data.toString(), PPTVVideoActivityInfoVO.class);
                    vipNewDialog = new VIPNewDialog.Builder(getActivity()).setActivityData(vo.getWayList(), vo.getVideoName()).setCloseListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            DialogUtil.dismiss(vipNewDialog);
                        }
                    }).setItemClickListener(new VIPNewDialog.ItemClickListener() {
                        @Override
                        public void onClick(PPTVWatchVIPVideoActivityWay way) {
                            DialogUtil.dismiss(vipNewDialog);
                            if ("vip".equalsIgnoreCase(way.getType())) {
                                jumpToVIP();
                            } else {
                                if (way.getJumpDetail() != null)
                                    JumpActivityUtil.jumpPage(getActivity(), way.getJumpDetail(), way.getParams() != null ? com.alibaba.fastjson.JSONObject.parseObject(way.getParams().replace(
                                            "\\" + "\"", "\"")) : null);
                            }
                        }
                    }).create();
                    DialogUtil.show(vipNewDialog);
                }
            }
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                super.onFailure(statusCode, headers, responseString, throwable);
                Toast.makeText(getContext(), "网络请求出错", Toast.LENGTH_SHORT).show();
            }
        });
    }
    private void initView(View view) {
        loadingDialog = LoadingDialogUtil.getLoadingDialog(getContext(), "");
BuWanVideo/src/com/weikou/beibeivideo/ui/recent/WatchHistoryAdapter.java
@@ -15,7 +15,10 @@
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.util.glide.GlideRoundTransform;
import com.lcjian.library.widget.RatioLayout;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.VideoInfo;
import com.weikou.beibeivideo.entity.vo.WatchHistoryVO;
@@ -65,13 +68,19 @@
        if (StringUtils.isEmpty(videoInfo.getPicture()))
            videoInfo.setPicture("");
        try {
            Glide.with(context).load(videoInfo.getPicture())
                    .placeholder(R.drawable.ic_default_cover)
                    .error(R.drawable.ic_default_cover).into(viewHolder.iv_cover);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
        viewHolder.rl_picture.setTag(videoInfo.getPicture());
        viewHolder.rl_picture.post(new Runnable() {
            @Override
            public void run() {
                try {
                    Glide.with(context).load(viewHolder.rl_picture.getTag() + "").apply(new RequestOptions().centerCrop()).transform(new GlideRoundTransform(context, 6))
                            .placeholder(R.drawable.shape_video_list_cover_placeholder).into(viewHolder.iv_cover);
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    private void getVideoDetail(WatchHistoryVO vo,
@@ -115,6 +124,8 @@
            holder.chb_delete = (CheckBox) view.findViewById(R.id.chb_delete);
            holder.fl_video_select = (FrameLayout) view
                    .findViewById(R.id.fl_video_select);
            holder.rl_picture = view
                    .findViewById(R.id.rl_picture);
            view.setTag(holder);
        }
@@ -179,7 +190,6 @@
            });
            holder.chb_delete.setChecked(mSelectedIds.contains(vo.getId()));
        }
        holder.iv_cover.setImageResource(R.drawable.ic_default_cover);
        holder.tv_title.setText("");
        getVideoDetail(vo,
                holder);
@@ -195,6 +205,7 @@
        ImageButton btn_delete;
        CheckBox chb_delete;
        FrameLayout fl_video_select;
        RatioLayout rl_picture;
    }
    public Set<String> getSelectedIds() {
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendFragment.java
@@ -24,6 +24,7 @@
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
import com.google.gson.reflect.TypeToken;
import com.lcjian.library.RetainViewFragment;
import com.lcjian.library.content.ConnectivityChangeHelper;
@@ -704,6 +705,13 @@
                                type.setParams(obj.optString("Params"));
                                type.setIcon(obj.optString("Icon"));
                                type.setNeedAd(obj.optBoolean("NeedAd", false));
                                type.setRefreshPosition(obj.optInt("RefreshPosition", 0));
                                type.setMoreTag(obj.optString("MoreTag"));
                                type.setCount(obj.optInt("Count"));
                                type.setNumber(obj.optInt("Number"));
                                type.setCurrentPage(1);
                                if (obj.optJSONObject("Ad") != null)
                                    type.setAd(gson.fromJson(obj.optJSONObject("Ad").toString(), HomeType.HomeTypeAd.class));
@@ -716,10 +724,6 @@
                                        homeList.add(gson.fromJson(homeArray
                                                        .optJSONObject(j).toString(),
                                                HomeVideo.class));
                                        //TODO 测试
                                        if (i == 1 && j == 0) {
                                            homeList.get(0).setBigPicture(true);
                                        }
                                    }
                                }
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java
@@ -26,7 +26,6 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.lcjian.library.util.common.DimenUtils;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.widget.RatioLayout;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
@@ -49,6 +48,7 @@
import com.weikou.beibeivideo.util.VideoUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import com.weikou.beibeivideo.util.video.VideoUIUtil;
import org.apache.http.Header;
@@ -259,7 +259,7 @@
            //更多
            if (Boolean.parseBoolean(homeType.getHasMore())) {
                holder.tv_more.setVisibility(View.VISIBLE);
                if (!StringUtils.isEmpty(homeType.getMoreTag())) {
                if (!StringUtils.isNullOrEmpty(homeType.getMoreTag())) {
                    holder.tv_more.setText(homeType.getMoreTag());
                } else {
                    holder.tv_more.setText("更多" + homeType.getName());
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/SearchResultActivity.java
@@ -202,7 +202,7 @@
        rv_video_search.setLayoutManager(new MyLinearLayoutManager(getApplicationContext()));
        DividerItemDecoration decoration = new DividerItemDecoration();
        decoration.setSize(DimenUtils.dip2px(rv_video_search.getContext(), 6));
        decoration.setSize(DimenUtils.dip2px(rv_video_search.getContext(), 15));
        rv_video_search.addItemDecoration(decoration);
        adapter = new SearchResultAdapter(this, mVideoInfos, new SearchResultAdapter.VideoAlbumNavClickListener() {
@@ -306,13 +306,13 @@
    private void setTopBarSelect(TextView tv_name, boolean selected) {
        if (selected) {
            tv_name.setBackgroundResource(R.drawable.vpi__tab_selected_focused_holo);
            tv_name.setTextSize(17);
            tv_name.setTextSize(19);
            tv_name.setTextColor(getResources().getColor(R.color.search_nav_highlight_text_color));
            tv_name.setPadding(0, 0, 0, DimenUtils.dip2px(getApplicationContext(), 5));
            tv_name.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
        } else {
            tv_name.setBackground(null);
            tv_name.setTextSize(12);
            tv_name.setTextSize(14);
            tv_name.setTextColor(getResources().getColor(R.color.nav_text_color));
            tv_name.setPadding(0, 0, 0, 0);
            tv_name.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
BuWanVideo/src/com/weikou/beibeivideo/ui/video/SearchResultAdapter.java
@@ -21,8 +21,11 @@
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.lcjian.library.util.common.DimenUtils;
import com.lcjian.library.util.common.StringUtils;
import com.lcjian.library.util.glide.GlideRoundTransform;
import com.lcjian.library.widget.RatioLayout;
import com.qq.e.ads.nativ.NativeADEventListener;
import com.qq.e.ads.nativ.NativeUnifiedADData;
import com.qq.e.ads.nativ.widget.NativeAdContainer;
@@ -121,7 +124,20 @@
                if (StringUtils.isBlank(pic))
                    pic = info.getPicture();
                Glide.with(mContext).load(pic).transition(withCrossFade()).placeholder(R.color.black).into(albumVideoHolder.iv_picture);
                albumVideoHolder.rl_picture.setTag(pic);
                albumVideoHolder.rl_picture.post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Glide.with(mContext).load(albumVideoHolder.rl_picture.getTag() + "").apply(new RequestOptions().centerCrop()).transition(withCrossFade()).transform(new GlideRoundTransform(mContext, 6)).placeholder(R.drawable.shape_video_list_cover_placeholder).into(albumVideoHolder.iv_picture);
                        } catch (IllegalArgumentException e) {
                            e.printStackTrace();
                        }
                    }
                });
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
@@ -177,7 +193,7 @@
            //设置分数
            if (!StringUtils.isEmpty(videoContent.getVideo().getScore())) {
                albumVideoHolder.tv_score.setVisibility(View.VISIBLE);
                String st = "评分:" + videoContent.getVideo().getScore();
                String st = "评分:" + videoContent.getVideo().getScore()+" ";
                SpannableString spannableString = new SpannableString(st);
                spannableString.setSpan(new AbsoluteSizeSpan(DimenUtils.spToPixels(13, mContext)), 3, st.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF9C00")), 3, st.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
@@ -270,11 +286,18 @@
        } else if (holder instanceof SimpleVideoHolder) {
            final VideoInfo info = videoContent.getVideo();
            SimpleVideoHolder simpleVideoHolder = (SimpleVideoHolder) holder;
            try {
                Glide.with(mContext).load(info.getPicture()).transition(withCrossFade()).placeholder(R.color.black).into(simpleVideoHolder.iv_movie_cover);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
            simpleVideoHolder.rl_picture.setTag(info.getPicture());
            simpleVideoHolder.rl_picture.post(new Runnable() {
                @Override
                public void run() {
                    try {
                        Glide.with(mContext).load(simpleVideoHolder.rl_picture.getTag() + "").apply(new RequestOptions().centerCrop()).transition(withCrossFade()).transform(new GlideRoundTransform(mContext, 6)).placeholder(R.drawable.shape_video_list_cover_placeholder).into(simpleVideoHolder.iv_movie_cover);
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }
                }
            });
            simpleVideoHolder.tv_movie_title.setText(info.getName() + "");
            if (info.getFree() == 1) {
@@ -301,7 +324,19 @@
            if (videoContent.getAd().getGdt2Unfied() != null) {
                NativeUnifiedADData ad = videoContent.getAd().getGdt2Unfied();
                Glide.with(mContext).load(ad.getImgUrl()).transition(withCrossFade()).placeholder(R.drawable.shape_video_list_cover_placeholder).into(viewHolder.iv_picture);
                viewHolder.rl_picture.setTag(ad.getImgUrl());
                viewHolder.rl_picture.post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Glide.with(mContext).load(viewHolder.rl_picture.getTag() + "").apply(new RequestOptions().centerCrop()).transition(withCrossFade()).transform(new GlideRoundTransform(mContext, 6)).placeholder(R.drawable.shape_video_list_cover_placeholder).into(viewHolder.iv_picture);
                        } catch (IllegalArgumentException e) {
                            e.printStackTrace();
                        }
                    }
                });
                viewHolder.tv_name.setText(ad.getTitle());
                viewHolder.tv_actors.setText(ad.getDesc());
@@ -411,6 +446,7 @@
        TextView tv_play;
        View view;
        NativeAdContainer mNativeAdContainer;
        RatioLayout rl_picture;
        public VideoAdHolder(View view) {
            super(view);
@@ -422,7 +458,7 @@
            tv_actors = view.findViewById(R.id.tv_actors);
            tv_play = view.findViewById(R.id.tv_play);
            mNativeAdContainer = view.findViewById(R.id.root);
            rl_picture = view.findViewById(R.id.rl_picture);
        }
    }
@@ -444,6 +480,7 @@
        FrameLayout ll_nav;
        TextView tv_video_1, tv_video_2, tv_video_3, tv_video_4, tv_video_5;
        View view;
        RatioLayout rl_picture;
        public AlbumVideoHolder(View view) {
            super(view);
@@ -466,12 +503,14 @@
            tv_nav_more = view.findViewById(R.id.tv_nav_more);
            tv_score = view.findViewById(R.id.tv_score);
            tv_director = view.findViewById(R.id.tv_director);
            rl_picture = view.findViewById(R.id.rl_picture);
        }
    }
    class SimpleVideoHolder extends RecyclerView.ViewHolder {
        ImageView iv_movie_cover;
        ImageView iv_vip;
        RatioLayout rl_picture;
        TextView tv_movie_title, tv_tag;
        View view;
@@ -483,6 +522,7 @@
            tv_movie_title = view.findViewById(R.id.tv_movie_title);
            tv_tag = view.findViewById(R.id.tv_tag);
            iv_vip = view.findViewById(R.id.iv_vip);
            rl_picture = view.findViewById(R.id.rl_picture);
        }
    }
BuWanVideo/src/com/weikou/beibeivideo/ui/video/VideoColumn2Adapter.java
@@ -5,9 +5,6 @@
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -17,15 +14,10 @@
import android.view.ViewGroup;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.DrawableImageViewTarget;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.lcjian.library.util.common.DimenUtils;
import com.lcjian.library.util.common.StringUtils;
import com.qq.e.ads.nativ.NativeUnifiedADData;
import com.qq.e.ads.nativ.widget.NativeAdContainer;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.entity.VideoInfo;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.entity.recommend.holder.RecommendVideoAdHolder;
@@ -33,20 +25,14 @@
import com.weikou.beibeivideo.entity.video.holder.FooterViewHolder;
import com.weikou.beibeivideo.entity.video.holder.HeaderViewHolder;
import com.weikou.beibeivideo.entity.video.holder.VideoHolder;
import com.weikou.beibeivideo.ui.media.VideoDetailActivity;
import com.weikou.beibeivideo.ui.media.VideoDetailActivity2;
import com.weikou.beibeivideo.util.VideoUtil;
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
import com.weikou.beibeivideo.util.ad.GDTConstant;
import com.weikou.beibeivideo.util.ad.GDTNativeADUnifiedManager;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.util.video.VideoUIUtil;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
public class VideoColumn2Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
BuWanVideo/src/com/weikou/beibeivideo/ui/video/VideoRecommendAdapter.java
@@ -153,7 +153,7 @@
            }
            if (totalSize >= 6) {
                outRect.top = minWidth * 2;
                outRect.top = DimenUtils.dipToPixels(8, view.getContext());
            } else
                outRect.top = 0;
@@ -171,7 +171,7 @@
                }
            }
            if (lastRow)
                outRect.bottom = minWidth * 2;
                outRect.bottom =  DimenUtils.dipToPixels(8, view.getContext());
            else
                outRect.bottom = 0;
@@ -209,13 +209,13 @@
            }
            if (index - 2 > 0) {
                outRect.top = minWidth * 3;
                outRect.top = DimenUtils.dipToPixels(8, view.getContext());
            } else
                outRect.top = 0;
            if (total > 3) {
                if (index < ((total - 1) / 3) * 3)
                    outRect.bottom = minWidth * 3;
                    outRect.bottom = DimenUtils.dipToPixels(0, view.getContext());
                else
                    outRect.bottom = 0;
            } else
@@ -459,6 +459,7 @@
        if (viewHolder instanceof VideoHolder) {
            VideoHolder holder = (VideoHolder) viewHolder;
            final VideoInfo info = content.getVideo();
            VideoUIUtil.setVideoListItem(mContext, holder, new View.OnClickListener() {
                @Override
                public void onClick(final View v) {
@@ -492,8 +493,8 @@
        int count = 0;
        if (contentList != null)
            count = contentList.size();
        if (columns < 4)
            count = count % columns == 0 ? count : ((count / columns) * columns);
//        if (columns < 4)
//            count = count ;//% columns == 0 ? count : ((count / columns) * columns);
        if (headerView != null)
            count++;
        if (footerView != null)
@@ -509,8 +510,8 @@
        int count = contentList == null ? 0 : contentList.size();
        int contentCount = count;
        if (columns < 4)
            contentCount = count % columns == 0 ? count : ((count / columns) * columns);
//        if (columns < 4)
//            contentCount = count % columns == 0 ? count : ((count / columns) * columns);
        if (position == 0) {
            if (headerView != null)
BuWanVideo/src/com/weikou/beibeivideo/util/ad/SplashAdUtil.java
@@ -56,7 +56,8 @@
        String channel = ManifestDataUtil.getAppMetaData(context, "UMENG_CHANNEL");
        if (StringUtils.isNullOrEmpty(code))
            code = BeibeiConstant.GDT_SPLASH_POSITION_ID;
        skip.setVisibility(View.VISIBLE);
        if (skip != null)
            skip.setVisibility(View.VISIBLE);
        gdtSplashAD = new SplashAD(context, skip, code, new SplashADListener() {
            @Override
            public void onADDismissed() {
BuWanVideo/src/com/weikou/beibeivideo/util/browser/PPJavaInterface.java
@@ -105,6 +105,18 @@
        eventListener.onPlayFinish();
    }
    /**
     * 视频信息回调
     *
     * @param name 视频名称
     * @param cid
     * @param vid
     */
    @JavascriptInterface
    public void videoInfo(String name, String cid, String vid) {
    }
    public interface IEventListener {
        public void onLogin();
BuWanVideo/src/com/weikou/beibeivideo/util/video/VideoUIUtil.java
@@ -1,9 +1,11 @@
package com.weikou.beibeivideo.util.video;
import android.content.Context;
import android.graphics.Typeface;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.StyleSpan;
import android.view.View;
import com.bumptech.glide.Glide;
@@ -74,13 +76,13 @@
            viewHolder.tv_tag.setVisibility(View.VISIBLE);
        }
        info.setScore("9.6");
        if (!StringUtils.isEmpty(info.getScore())) {
            viewHolder.tv_score.setVisibility(View.VISIBLE);
            //改变
            SpannableString spannableString = new SpannableString(info.getScore() + "分");
            spannableString.setSpan(new AbsoluteSizeSpan(DimenUtils.spToPixels(13, mContext)), 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spannableString.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 0, info.getScore().length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            viewHolder.tv_score.setText(spannableString);
        } else {
            viewHolder.tv_score.setVisibility(View.INVISIBLE);
gallery/.gitignore
New file
@@ -0,0 +1 @@
/build
gallery/build.gradle
New file
@@ -0,0 +1,42 @@
apply plugin: 'com.android.library'
android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 13
        versionName "1.3"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(path: ':library-common')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    //Glide
    api 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
gallery/proguard-rules.pro
New file
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
gallery/src/androidTest/java/com/lzj/gallery/library/ExampleInstrumentedTest.java
New file
@@ -0,0 +1,26 @@
package com.lzj.gallery.library;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
 * Instrumented test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();
        assertEquals("com.lzj.gallery.library.test", appContext.getPackageName());
    }
}
gallery/src/main/AndroidManifest.xml
New file
@@ -0,0 +1,2 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lzj.gallery.library" />
gallery/src/main/java/com/lzj/gallery/library/adapter/BannerPagerAdapter.java
New file
@@ -0,0 +1,143 @@
package com.lzj.gallery.library.adapter;
import android.content.Context;
import androidx.viewpager.widget.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.lcjian.library.widget.RatioLayout;
import com.lzj.gallery.library.R;
import java.util.List;
/**
 * Created by Administrator on 2018/11/28.
 * banner的适配器
 */
public class BannerPagerAdapter extends PagerAdapter {
    private List<String> mList;
    private Context mContext;
    private int defaultImg = R.mipmap.ic_banner_error;//默认图片
    private int mRoundCorners = -1;
    private int mMaxNumber;//最大banner数
    private Float imgRatio;
    /**
     * 默认
     *
     * @param defaultImg
     */
    public void setDefaultImg(int defaultImg) {
        this.defaultImg = defaultImg;
    }
    /**
     * 设置圆角
     *
     * @param mRoundCorners
     */
    public void setmRoundCorners(int mRoundCorners) {
        this.mRoundCorners = mRoundCorners;
    }
    /**
     * 点击回调
     */
    public interface OnClickImagesListener {
        void onImagesClick(int position);
    }
    private OnClickImagesListener mImagesListener;
    public void setOnClickImagesListener(OnClickImagesListener listener) {
        mImagesListener = listener;
    }
    public BannerPagerAdapter(List<String> list, Context context, Float imgRatio) {
        // this.mList = list;
        this.imgRatio = imgRatio;
        this.mContext = context;
        if (mList == null) {
            mList = list;
        }
        if (list.size() > 9) {
            this.mMaxNumber = 9;
        } else {
            this.mMaxNumber = list.size();
        }
    }
    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.banner_img_layout, container, false);
        ImageView imageView = view.findViewById(R.id.img);
        RatioLayout rl = view.findViewById(R.id.rl_img);
        if (imgRatio != null)
            rl.setRatio(imgRatio);
        final int index = position % mMaxNumber;
        LoadImage(mList.get(index), imageView);
        //OnClick
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mImagesListener.onImagesClick(index);
            }
        });
        container.addView(view);
        return view;
    }
    /**
     * 加载图片
     */
    public void LoadImage(String url, ImageView imageview) {
        if (mRoundCorners == -1) {
            Glide.with(mContext)
                    .load(url)
//                    .centerCrop()
                    .dontAnimate()
                    .placeholder(defaultImg)// 加载中图片
                    .error(defaultImg) // 加载失败图片
                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)//设置磁盘缓存
                    .into(imageview);
        } else {
            Glide.with(mContext)
                    .load(url)
                    .centerCrop()
                    .dontAnimate()
                    .placeholder(defaultImg)// 加载中图片
                    .error(defaultImg) // 加载失败图片
                    .transform(new RoundedCorners(mRoundCorners)) //
                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)//设置磁盘缓存
                    .into(imageview);
        }
    }
}
gallery/src/main/java/com/lzj/gallery/library/transformer/CornerTransform.java
New file
@@ -0,0 +1,65 @@
package com.lzj.gallery.library.transformer;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import java.security.MessageDigest;
/**
 * Created by Administrator on 2018/11/28.
 * 自定义圆角
 */
public class CornerTransform extends BitmapTransformation {
    private static float radius = 0f;
    public CornerTransform(Context context) {
        this(context, 4);
    }
    public CornerTransform(Context context, int dp) {
       // super(context);
        radius = Resources.getSystem().getDisplayMetrics().density * dp;
    }
    @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return roundCrop(pool, toTransform);
    }
    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;
        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        }
        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);
        return result;
    }
    public String getId() {
        return getClass().getName() + Math.round(radius);
    }
    @Override
    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
    }
}
gallery/src/main/java/com/lzj/gallery/library/transformer/ZoomPageTransformer.java
New file
@@ -0,0 +1,70 @@
package com.lzj.gallery.library.transformer;
import androidx.viewpager.widget.ViewPager;
import android.view.View;
/**
 * Created by Administrator on 2018/11/28.
 * 3D画廊效果其实就是ViewPager的item切换时,进行缩放的动画效果
 *
 */
public class ZoomPageTransformer implements ViewPager.PageTransformer {
    private static final float MAX_SCALE = 1.0f;//0缩放
    private static final float MIN_SCALE = 0.85f;//0.85缩放
    private float MIN_ALPHA = 1.0f;//最小透明度
    public ZoomPageTransformer() {
    }
    public ZoomPageTransformer(float MIN_ALPHA) {
        this.MIN_ALPHA = MIN_ALPHA;
    }
    @Override
    public void transformPage(View view, float position) {
        //setScaleY只支持api11以上
        /**
         * (-oo,-1) 相对于左边第一页,其左边的所有页面 **
         * x、y拉伸为MIN_SCALE、透明度MIN_ALPHA
         */
        if (position < -1) {
            view.setScaleX(MIN_SCALE);
            view.setScaleY(MIN_SCALE);
            view.setAlpha(MIN_ALPHA);
        }
        /**
         * [-1, 1 )当前页的左右第一页
         */
        else if (position < 1) {
            float scaleFactor = MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE - MIN_SCALE);
            //[0, 1 ) 相对于当前选中页,其右边第一页 **
            if (position > 0) {
                view.setTranslationX(-scaleFactor);
            }
            // [-1, 0 ) 相对于当前选中页,其左边的第一页**
            else if (position < 0) {
                view.setTranslationX(scaleFactor);
            }
            view.setScaleY(scaleFactor);
            view.setScaleX(scaleFactor);
            // float alpha = 1f -  Math.abs(position) * (1 - );
            float alpha = MIN_ALPHA + (1 - MIN_ALPHA) * (1 - Math.abs(position));
            view.setAlpha(alpha);
        }
        /**
         * [1,+oo) 相对于右边第一页,其右边的所有页面
         * x、y拉伸为MIN_SCALE、透明度MIN_ALPHA
         */
        else { // (1,+Infinity]
            view.setScaleX(MIN_SCALE);
            view.setScaleY(MIN_SCALE);
            view.setAlpha(MIN_ALPHA);
        }
    }
}
gallery/src/main/java/com/lzj/gallery/library/views/BannerViewPager.java
New file
@@ -0,0 +1,482 @@
package com.lzj.gallery.library.views;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import androidx.viewpager.widget.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.lzj.gallery.library.R;
import com.lzj.gallery.library.adapter.BannerPagerAdapter;
import com.lzj.gallery.library.transformer.ZoomPageTransformer;
import java.util.List;
/**
 * Created by Administrator on 2018/11/28.
 * banner的控件处理
 */
public class BannerViewPager extends RelativeLayout implements ViewPager.OnPageChangeListener {
    private View mLayout;//布局
    private Activity mContext;//上下文
    private ViewPager mViewPager;//viewpager
    private BannerPagerAdapter mPagerAdapter;//adapter
    private LinearLayout mLineIndicator;//指示器集合容器
    private ImageView[] mImageView;//小圆点imageview对象
    private List<String> mList;//url数组
    private int mMaxNumber;//最大banner数
    private int currentIndex = 0;//当前实际page
    private int startCurrentIndex = 2000;//当前page
    private long secondTime = 0, firstTime = 0;
    private boolean isSlide = false;
    //private Timer mTimer=null;//定时器
    //private MyTimerTask mTimerTask=null;
    private Handler mHandler = null;
    private AutoRollRunnable mAutoRollRunnable = null;
    private int mRollTime = 5000;
    private int resId_piont_press = R.mipmap.ic_banner_point_press;
    private int resId_piont = R.mipmap.ic_banner_point;
    private boolean isPoint = false;//开启指示器
    private float imgRatio;//显示图片的宽高比
    public interface OnClickBannerListener {
        void onBannerClick(int position);
    }
    private OnClickBannerListener mBannerListener;
    public BannerViewPager addBannerListener(OnClickBannerListener listener) {
        mBannerListener = listener;
        return this;
    }
    //ui更新
//    Handler mHandler=mHandler= new Handler(){
//        public void handleMessage(Message msg) {
//            int index =  mViewPager.getCurrentItem()+1;//下一个页
//            mViewPager.setCurrentItem(index);//设置此次要显示的pager
//            currentIndex=index%mList.size();
//            setImageBackground(currentIndex);
//        }
//    };
    public BannerViewPager(Context context) {
        super(context);
    }
    public BannerViewPager(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    public BannerViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = (Activity) context;
    }
    /**
     * 初始化viewpager
     *
     * @param list      url集合
     * @param isGallery 是否使用3D画廊效果
     */
    public BannerViewPager initBanner(List<String> list, boolean isGallery, float imgRatio) {
        this.imgRatio = imgRatio;
        checkException(list);
        if (mList == null) {
            mList = list;
            if (list.size() > 15) {
                mMaxNumber = 15;
            } else {
                mMaxNumber = list.size();
            }
        }
        Log.i("test", "----------------------size=" + mList.size());
        //引入布局
        mLayout = LayoutInflater.from(mContext).inflate(R.layout.banner_view_layout, null);
        mViewPager = mLayout.findViewById(R.id.viewPager);//关闭
        mLineIndicator = mLayout.findViewById(R.id.lineIndicator);
        //初始化位置
        currentIndex = startCurrentIndex % mMaxNumber;
        mPagerAdapter = new BannerPagerAdapter(mList, mContext, imgRatio);
        mPagerAdapter.setOnClickImagesListener(new BannerPagerAdapter.OnClickImagesListener() {
            @Override
            public void onImagesClick(int position) {
                if (mBannerListener != null) {
                    mBannerListener.onBannerClick(position);
                }
            }
        });
        mViewPager.setAdapter(mPagerAdapter);
        if (isGallery) {
            mViewPager.setPageTransformer(true, new ZoomPageTransformer());
        }
        mViewPager.setCurrentItem(startCurrentIndex);
        mViewPager.setOffscreenPageLimit(2);//设置预加载的数量,这里设置了2,会预加载中心item左边两个Item和右边两个Item
        mViewPager.addOnPageChangeListener(this);
        return this;
    }
    /**
     * 是否有adapter
     *
     * @return
     */
    public boolean hasAdapter() {
        return mViewPager != null && mViewPager.getAdapter() != null;
    }
    public void notifyDataSetChanged() {
        if (mPagerAdapter != null)
            mPagerAdapter.notifyDataSetChanged();
    }
    /**
     * 初始化viewpager
     *
     * @param list      url集合
     * @param isGallery 是否使用3D画廊效果
     * @param alpha     滑动透明度变化
     */
    public BannerViewPager initBanner(List<String> list, boolean isGallery, float imgRatio, float alpha) {
        checkException(list);
        this.imgRatio = imgRatio;
        if (mList == null) {
            mList = list;
            if (list.size() > 15) {
                this.mMaxNumber = 15;
            } else {
                this.mMaxNumber = list.size();
            }
        }
        Log.i("test", "----------------------size=" + mList.size());
        //引入布局
        mLayout = LayoutInflater.from(mContext).inflate(R.layout.banner_view_layout, null);
        mViewPager = mLayout.findViewById(R.id.viewPager);//关闭
        mLineIndicator = mLayout.findViewById(R.id.lineIndicator);
        //初始化位置
        currentIndex = startCurrentIndex % mMaxNumber;
        mPagerAdapter = new BannerPagerAdapter(mList, mContext,imgRatio);
        mPagerAdapter.setOnClickImagesListener(new BannerPagerAdapter.OnClickImagesListener() {
            @Override
            public void onImagesClick(int position) {
                if (mBannerListener != null) {
                    mBannerListener.onBannerClick(position);
                }
            }
        });
        mViewPager.setAdapter(mPagerAdapter);
        if (isGallery) {
            mViewPager.setPageTransformer(true, new ZoomPageTransformer(alpha));
        }
        mViewPager.setCurrentItem(startCurrentIndex);
        mViewPager.setOffscreenPageLimit(2);//设置预加载的数量,这里设置了2,会预加载中心item左边两个Item和右边两个Item
        mViewPager.addOnPageChangeListener(this);
        return this;
    }
    /**
     * 添加默认图片,当加载失败后显示
     *
     * @param resId_img
     * @return
     */
    public BannerViewPager addDefaultImg(int resId_img) {
        mPagerAdapter.setDefaultImg(resId_img);
        return this;
    }
    /**
     * 添加圆角
     *
     * @param corners
     * @return
     */
    public BannerViewPager addRoundCorners(int corners) {
        mPagerAdapter.setmRoundCorners(corners);
        return this;
    }
    /**
     * @param columnMargin 两个Page之间的距离
     * @param rowMargin    page的外边距
     *                     注意当添加了3D画廊效果时,columnMargin尽量设小。应该本是已经进行了x、y的缩放
     */
    public BannerViewPager addPageMargin(int columnMargin, int rowMargin) {
        mViewPager.setPageMargin(dip2px(columnMargin));
        RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        layout.setMargins(dip2px(rowMargin), 0, dip2px(rowMargin), 0);
        mViewPager.setLayoutParams(layout);
        return this;
    }
    /**
     * 添加小圆点
     *
     * @param distance 间距
     */
    public BannerViewPager addPointMargin(int distance) {
        isPoint = true;
        mImageView = new ImageView[mMaxNumber];
        for (int i = 0; i < mMaxNumber; i++) {
            ImageView imageView = new ImageView(mContext);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(dip2px(distance) / 2, 0, dip2px(distance) / 2, 0);
            imageView.setLayoutParams(params);
            if (i == currentIndex) {
                imageView.setImageResource(resId_piont_press);
            } else {
                imageView.setImageResource(resId_piont);
            }
            mImageView[i] = imageView;
            mLineIndicator.addView(imageView);
        }
        return this;
    }
    /**
     * 添加小圆点
     *
     * @param distance    间距
     * @param piont_press 替换选中图标
     * @param piont       替换未选中图片
     */
    public BannerViewPager addPoint(int distance, int piont_press, int piont) {
        isPoint = true;
        resId_piont_press = piont_press;
        resId_piont = piont;
        mImageView = new ImageView[mMaxNumber];
        for (int i = 0; i < mMaxNumber; i++) {
            ImageView imageView = new ImageView(mContext);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(dip2px(distance) / 2, 0, dip2px(distance) / 2, 0);
            imageView.setLayoutParams(params);
            if (i == currentIndex) {
                imageView.setImageResource(resId_piont_press);
            } else {
                imageView.setImageResource(resId_piont);
            }
            mImageView[i] = imageView;
            mLineIndicator.addView(imageView);
        }
        return this;
    }
    /**
     * 添加小圆点底部间距
     *
     * @param paddBottom
     */
    public BannerViewPager addPointBottom(int paddBottom) {
        mLineIndicator.setPadding(0, 0, 0, dip2px(paddBottom));
        return this;
    }
    /**
     * 配置完成,将布局添加到父容器
     */
    public BannerViewPager finishConfig() {
        this.addView(mLayout);
        return this;
    }
    //开始轮播
    public BannerViewPager addStartTimer(int time) {
        mRollTime = time;
        if (mHandler == null) {
            mHandler = new Handler();
        }
        if (mAutoRollRunnable == null) {
            mAutoRollRunnable = new AutoRollRunnable();
        }
        mAutoRollRunnable.start();
        return this;
    }
    // 停止轮播
    public void stopTimer() {
        if (mAutoRollRunnable != null) {
            mAutoRollRunnable.stop();
        }
    }
    private class AutoRollRunnable implements Runnable {
        //是否在轮播的标志
        boolean isRunning = false;
        @SuppressLint("ClickableViewAccessibility")
        @Override
        public void run() {
            if (isRunning && !isSlide) {
                int index = mViewPager.getCurrentItem() + 1;//下一个页
                mViewPager.setCurrentItem(index);//设置此次要显示的pager
                currentIndex = index % mMaxNumber;
                setImageBackground(currentIndex);
                mHandler.postDelayed(this, 1000 * mRollTime);
            }
            if (isSlide) {
                mHandler.postDelayed(this, 1000 * mRollTime);
                isSlide = false;
            }
            //轮播图触摸监听,解决滑动计时无法停止的问题
            /*
             * viewPager监听触摸事件,因为我们要保证用户在手动滑动viewPager后,系统重新计时,viewPage按一定时间间隔循环展示,
             * 当手指按上屏幕或者是手指出现滑动动作,子线程都必须撤销(计时也就是消失)
             * 当手机松开之后系统重新计时,子线程与UI线程绑定,进行计时操作
             */
            mViewPager.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                        case MotionEvent.ACTION_MOVE:
                            mHandler.removeCallbacks(mAutoRollRunnable);
                            break;
                        case MotionEvent.ACTION_UP:
                            isSlide = true;
                            mHandler.post(mAutoRollRunnable);
                            break;
                    }
                    return false;
                }
            });
        }
        public void start() {
            if (!isRunning) {
                isRunning = true;
                mHandler.removeCallbacks(this);
                mHandler.postDelayed(this, 1000 * mRollTime);
            }
        }
        public void stop() {
            if (isRunning) {
                mHandler.removeCallbacks(this);
                isRunning = false;
            }
        }
    }
//    /**
//     * 开启定时器
//     * @param time
//     */
//    public BannerViewPager addStartTimer(int time) {
//        if (mTimer == null) {
//            mTimer = new Timer();
//        }
//        if(mTimerTask==null){
//            mTimerTask=new MyTimerTask();
//        }
//        mTimer.schedule(mTimerTask, 3000, 1000*time);
//        return this;
//    }
//    /**
//     * 停止定时器
//     */
//    public void stopTimer(){
//        if(mTimer!=null){
//            mTimer.cancel();
//            mTimer = null;
//        }
//        if(mTimerTask!=null){
//            mTimerTask.cancel();
//            mTimerTask = null;
//        }
//    }
//    class MyTimerTask extends TimerTask {
//        @Override
//        public void run() {
//            mHandler.sendEmptyMessage(1001);//在此线程中,不能操作ui主线程
//        }
//    }
    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public int dip2px(float dpValue) {
        final float scale = mContext.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    //---------------viewpager滑动事件-----------------
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }
    @Override
    public void onPageScrollStateChanged(int state) {
    }
    /**
     * 滑动时同步改变底部小圆点
     *
     * @param position
     */
    @Override
    public void onPageSelected(int position) {
        currentIndex = position % mMaxNumber;
        setImageBackground(currentIndex);
    }
    /**
     * 改变指示器
     *
     * @param selectItemsIndex
     */
    private void setImageBackground(int selectItemsIndex) {
        if (isPoint) {
            for (int i = 0; i < mImageView.length; i++) {
                if (i == selectItemsIndex) {
                    mImageView[i].setImageResource(resId_piont_press);
                } else {
                    mImageView[i].setImageResource(resId_piont);
                }
            }
        }
    }
    /**
     * 检查异常
     *
     * @param list
     */
    private void checkException(List<String> list) {
        if (list == null) {
            throw new NullPointerException("The array is null at initBanner function");
        }
        if (list.size() == 0) {
            throw new ArithmeticException("Your array size is 0");
        }
    }
}
gallery/src/main/res/layout/banner_img_layout.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal">
    <com.lcjian.library.widget.RatioLayout
        android:id="@+id/rl_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:ratio="0.7">
        <ImageView
            android:id="@+id/img"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY" />
    </com.lcjian.library.widget.RatioLayout>
</RelativeLayout>
gallery/src/main/res/layout/banner_view_layout.xml
New file
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipChildren="false">
    <!--viewpager-->
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipChildren="false"
        android:layout_marginLeft="60dp"
        android:layout_marginRight="60dp"/>
    <!--指示器-->
    <LinearLayout
        android:id="@+id/lineIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal"
        android:paddingBottom="7dp"
        android:gravity="center">
        <!--<ImageView-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:src="@mipmap/ic_banner_point_press"-->
        <!--android:layout_marginLeft="8dp"-->
        <!--android:layout_marginRight="8dp"/>-->
    </LinearLayout>
</RelativeLayout>
gallery/src/main/res/mipmap-xhdpi/ic_banner_error.png
gallery/src/main/res/mipmap-xhdpi/ic_banner_point.png
gallery/src/main/res/mipmap-xhdpi/ic_banner_point_press.png
gallery/src/main/res/values/strings.xml
New file
@@ -0,0 +1,3 @@
<resources>
    <string name="app_name">gallery</string>
</resources>
gallery/src/test/java/com/lzj/gallery/library/ExampleUnitTest.java
New file
@@ -0,0 +1,17 @@
package com.lzj.gallery.library;
import org.junit.Test;
import static org.junit.Assert.*;
/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}
library-common/src/com/lcjian/library/util/glide/GlideRoundTransform.java
@@ -8,6 +8,7 @@
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.NonNull;
import android.util.Log;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
@@ -25,8 +26,9 @@
 */
public class GlideRoundTransform extends BitmapTransformation {
    private static final String ID = GlideRoundTransform.class.getClass().getName();
    private static final String TAG = "GlideRoundTransform";
    private static byte[] ID_BYTES = null;
    private static float radius = 0f;
    private  float radius = 0f;
    public GlideRoundTransform(Context context) {
        this(context, 12);
@@ -54,10 +56,12 @@
        return roundCrop(pool, bitmap == null ? toTransform : bitmap);
    }
    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
    private  Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null)
            return null;
        Log.i(TAG, "源图片大小:" + source.getWidth() + "-" + source.getHeight());
        Bitmap result = pool.get(source.getWidth(), source.getHeight(),
                Bitmap.Config.ARGB_8888);
        if (result == null) {
settings.gradle
@@ -9,4 +9,5 @@
include ':library-DownloadProvider'
include ':library-common'
include ':library-APPUpdate'
include ':gallery'
include ':BuWanVideo'