Repository: yoyiyi/bilisoleil-kotlin Branch: master Commit: 044f76fd499b Files: 615 Total size: 2.0 MB Directory structure: gitextract_eqh1bj5s/ ├── README.md ├── app/ │ ├── build.gradle │ ├── libs/ │ │ ├── MobCommons-2017.0412.1554.jar │ │ ├── MobTools-2017.0412.1554.jar │ │ ├── ShareSDK-Core-2.8.3.jar │ │ ├── ShareSDK-Email-2.8.3.jar │ │ ├── ShareSDK-Facebook-2.8.3.jar │ │ ├── ShareSDK-QQ-2.8.3.jar │ │ ├── ShareSDK-QZone-2.8.3.jar │ │ ├── ShareSDK-ShortMessage-2.8.3.jar │ │ ├── ShareSDK-SinaWeibo-2.8.3.jar │ │ ├── ShareSDK-TencentWeibo-2.8.3.jar │ │ ├── ShareSDK-Twitter-2.8.3.jar │ │ ├── ShareSDK-Wechat-2.8.3.jar │ │ ├── ShareSDK-Wechat-Core-2.8.3.jar │ │ ├── ShareSDK-Wechat-Favorite-2.8.3.jar │ │ └── ShareSDK-Wechat-Moments-2.8.3.jar │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── yoyiyi/ │ │ └── soleil/ │ │ └── ExampleInstrumentedTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── assets/ │ │ │ ├── ShareSDK.xml │ │ │ ├── dynamic.json │ │ │ ├── game_center.json │ │ │ ├── recommend.json │ │ │ ├── recommend_chase.json │ │ │ ├── region.json │ │ │ ├── search.json │ │ │ ├── user_chase.json │ │ │ ├── video_detail.json │ │ │ └── video_detail_comment.json │ │ ├── java/ │ │ │ ├── cn/ │ │ │ │ └── sharesdk/ │ │ │ │ └── onekeyshare/ │ │ │ │ ├── CustomerLogo.java │ │ │ │ ├── OnekeyShare.java │ │ │ │ ├── OnekeySharePage.java │ │ │ │ ├── OnekeyShareTheme.java │ │ │ │ ├── OnekeyShareThemeImpl.java │ │ │ │ ├── ShareContentCustomizeCallback.java │ │ │ │ └── themes/ │ │ │ │ └── classic/ │ │ │ │ ├── ClassicTheme.java │ │ │ │ ├── EditPage.java │ │ │ │ ├── FriendAdapter.java │ │ │ │ ├── FriendListItem.java │ │ │ │ ├── FriendListPage.java │ │ │ │ ├── IndicatorView.java │ │ │ │ ├── PRTHeader.java │ │ │ │ ├── PicViewerPage.java │ │ │ │ ├── PlatformPage.java │ │ │ │ ├── PlatformPageAdapter.java │ │ │ │ ├── RotateImageView.java │ │ │ │ ├── XView.java │ │ │ │ ├── land/ │ │ │ │ │ ├── EditPageLand.java │ │ │ │ │ ├── FriendListPageLand.java │ │ │ │ │ ├── PlatformPageAdapterLand.java │ │ │ │ │ └── PlatformPageLand.java │ │ │ │ └── port/ │ │ │ │ ├── EditPagePort.java │ │ │ │ ├── FriendListPagePort.java │ │ │ │ ├── PlatformPageAdapterPort.java │ │ │ │ └── PlatformPagePort.java │ │ │ └── com/ │ │ │ └── yoyiyi/ │ │ │ └── soleil/ │ │ │ ├── App.kt │ │ │ ├── adapter/ │ │ │ │ ├── app/ │ │ │ │ │ ├── up/ │ │ │ │ │ │ ├── ArchiveAdapter.kt │ │ │ │ │ │ ├── ArchiveFavouriteAdapter.kt │ │ │ │ │ │ ├── FavouriteAdapter.kt │ │ │ │ │ │ ├── SubmitedVideoAdapter.kt │ │ │ │ │ │ └── UpAdapter.kt │ │ │ │ │ └── video/ │ │ │ │ │ ├── CommentAdapter.kt │ │ │ │ │ └── SummaryAdapter.kt │ │ │ │ ├── bangumi/ │ │ │ │ │ ├── BangumiDetailAdapter.kt │ │ │ │ │ ├── BangumiDetailEpisodeAdapter.kt │ │ │ │ │ ├── BangumiDetailRecommendAdapter.kt │ │ │ │ │ ├── BangumiDetailSeasonAdapter.kt │ │ │ │ │ ├── BangumiIndexSection.kt │ │ │ │ │ └── BangumiScheduleSection.kt │ │ │ │ ├── discover/ │ │ │ │ │ ├── ActivityCenterAdapter.kt │ │ │ │ │ ├── GameCenterBookGiftAdapter.kt │ │ │ │ │ ├── InterestAdapter.kt │ │ │ │ │ ├── IntersetCategroyAdapter.kt │ │ │ │ │ ├── TopicCenterAdapter.kt │ │ │ │ │ └── section/ │ │ │ │ │ ├── GameCenterBookGiftSection.kt │ │ │ │ │ ├── GameCenterGameListSection.kt │ │ │ │ │ └── GameCenterUserSection.kt │ │ │ │ ├── home/ │ │ │ │ │ ├── ChaseFllowAdapter.kt │ │ │ │ │ ├── ChaseRecommendCNAdapter.kt │ │ │ │ │ ├── ChaseRecommendJPAdapter.kt │ │ │ │ │ ├── DynamicAdapter.kt │ │ │ │ │ ├── MainAdapter.kt │ │ │ │ │ ├── RecommendAdapter.kt │ │ │ │ │ ├── RegionActivityCenterAdapter.kt │ │ │ │ │ ├── RegionEntranceAdapter.kt │ │ │ │ │ ├── live/ │ │ │ │ │ │ ├── LiveAdapter.kt │ │ │ │ │ │ ├── LiveEntranceAdapter.kt │ │ │ │ │ │ ├── LivePartitionAdapter.kt │ │ │ │ │ │ └── LiveRecommendAdapter.kt │ │ │ │ │ └── section/ │ │ │ │ │ ├── chase/ │ │ │ │ │ │ ├── ChaseAdSection.kt │ │ │ │ │ │ ├── ChaseFollowSection.kt │ │ │ │ │ │ ├── ChaseIndexSection.kt │ │ │ │ │ │ ├── ChaseRecommendCNSection.kt │ │ │ │ │ │ └── ChaseRecommendJPSection.kt │ │ │ │ │ └── region/ │ │ │ │ │ ├── RegionActivityCenterSection.kt │ │ │ │ │ ├── RegionEntranceSection.kt │ │ │ │ │ ├── RegionSection.kt │ │ │ │ │ └── RegionTopicSection.kt │ │ │ │ ├── recommend/ │ │ │ │ │ └── AllStationRankAdapter.kt │ │ │ │ ├── region/ │ │ │ │ │ ├── AllRegionRankAdapter.kt │ │ │ │ │ ├── RegionRecommendEntranceAdapter.kt │ │ │ │ │ └── sectiton/ │ │ │ │ │ ├── RegionRecommendBannerSection.kt │ │ │ │ │ ├── RegionRecommendDynamicSection.kt │ │ │ │ │ ├── RegionRecommendEntranceSection.kt │ │ │ │ │ ├── RegionRecommendNewSection.kt │ │ │ │ │ ├── RegionRecommendRecommendSection.kt │ │ │ │ │ ├── RegionTypeNewSection.kt │ │ │ │ │ └── RegionTypeRecommendSection.kt │ │ │ │ └── search/ │ │ │ │ ├── MovieAdapter.kt │ │ │ │ ├── MulArchiveAdapter.kt │ │ │ │ ├── SeasonAdapter.kt │ │ │ │ └── UpAdapter.kt │ │ │ ├── base/ │ │ │ │ ├── BaseActivity.kt │ │ │ │ ├── BaseContract.kt │ │ │ │ ├── BaseFragment.kt │ │ │ │ ├── BaseInjectActivity.kt │ │ │ │ ├── BaseInjectFragment.kt │ │ │ │ ├── BaseListSubscriber.kt │ │ │ │ ├── BaseObjectSubscriber.kt │ │ │ │ ├── BaseRefreshActivity.kt │ │ │ │ ├── BaseRefreshFragment.kt │ │ │ │ ├── BaseSubscriber.kt │ │ │ │ └── RxPresenter.kt │ │ │ ├── bean/ │ │ │ │ ├── app/ │ │ │ │ │ ├── Recommend.kt │ │ │ │ │ ├── Splash.kt │ │ │ │ │ └── video/ │ │ │ │ │ ├── MulComment.kt │ │ │ │ │ ├── MulSummary.kt │ │ │ │ │ ├── VideoDetail.kt │ │ │ │ │ ├── VideoDetailComment.kt │ │ │ │ │ └── VideoPlayer.kt │ │ │ │ ├── bangumi/ │ │ │ │ │ ├── BangumiDetail.kt │ │ │ │ │ ├── BangumiDetailComment.kt │ │ │ │ │ ├── BangumiDetailRecommend.kt │ │ │ │ │ ├── BangumiIndex.kt │ │ │ │ │ ├── BangumiSchedule.kt │ │ │ │ │ └── MulBangumiDetail.kt │ │ │ │ ├── chase/ │ │ │ │ │ ├── ChaseBangumi.kt │ │ │ │ │ └── RecommendBangumi.kt │ │ │ │ ├── discover/ │ │ │ │ │ ├── ActivityCenter.kt │ │ │ │ │ ├── Ceshi.kt │ │ │ │ │ ├── Community.kt │ │ │ │ │ ├── GameCenter.kt │ │ │ │ │ ├── HotSearchTag.kt │ │ │ │ │ ├── InterestAd.kt │ │ │ │ │ ├── InterestCategrory.kt │ │ │ │ │ ├── MulInterest.kt │ │ │ │ │ └── TopicCenter.kt │ │ │ │ ├── dynamic/ │ │ │ │ │ ├── Dynamic.kt │ │ │ │ │ └── MulDynamic.kt │ │ │ │ ├── live/ │ │ │ │ │ ├── LiveEntrance.kt │ │ │ │ │ ├── LivePartition.kt │ │ │ │ │ ├── LiveRecommend.kt │ │ │ │ │ ├── MulLive.kt │ │ │ │ │ └── support/ │ │ │ │ │ └── LiveEnter.kt │ │ │ │ ├── recommend/ │ │ │ │ │ ├── AllStationRank.kt │ │ │ │ │ ├── MulRecommend.kt │ │ │ │ │ └── Recommend.kt │ │ │ │ ├── region/ │ │ │ │ │ ├── Ad.kt │ │ │ │ │ ├── AllRegionRank.kt │ │ │ │ │ ├── Region.kt │ │ │ │ │ ├── RegionEnter.kt │ │ │ │ │ ├── RegionRecommend.kt │ │ │ │ │ ├── RegionTagType.kt │ │ │ │ │ └── RegionType.kt │ │ │ │ ├── search/ │ │ │ │ │ ├── Movie.kt │ │ │ │ │ ├── MulSearchArchive.kt │ │ │ │ │ ├── Search.kt │ │ │ │ │ ├── SearchArchive.kt │ │ │ │ │ ├── Season.kt │ │ │ │ │ └── Up.kt │ │ │ │ └── user/ │ │ │ │ ├── MulUpDetail.kt │ │ │ │ ├── UpDetail.kt │ │ │ │ └── UserDetail.kt │ │ │ ├── constant/ │ │ │ │ └── Constants.kt │ │ │ ├── di/ │ │ │ │ ├── component/ │ │ │ │ │ ├── ActivityComponent.kt │ │ │ │ │ ├── AppComponent.kt │ │ │ │ │ └── FragmentComponent.kt │ │ │ │ ├── module/ │ │ │ │ │ ├── ActivityModule.kt │ │ │ │ │ ├── ApiModule.kt │ │ │ │ │ ├── AppModule.kt │ │ │ │ │ └── FragmentModule.kt │ │ │ │ ├── qualifier/ │ │ │ │ │ ├── AccountUrl.kt │ │ │ │ │ ├── ApiUrl.kt │ │ │ │ │ ├── AppUrl.kt │ │ │ │ │ ├── BangumiUrl.kt │ │ │ │ │ ├── BiliUrl.kt │ │ │ │ │ ├── Im9Url.kt │ │ │ │ │ ├── LiveUrl.kt │ │ │ │ │ ├── RankUrl.kt │ │ │ │ │ ├── SearchUrl.kt │ │ │ │ │ ├── UserUrl.kt │ │ │ │ │ └── VipUrl.kt │ │ │ │ └── scope/ │ │ │ │ ├── ActivityScope.kt │ │ │ │ └── FragmentScope.kt │ │ │ ├── event/ │ │ │ │ └── Event.kt │ │ │ ├── ext/ │ │ │ │ ├── AppExt.kt │ │ │ │ ├── BannerExt.kt │ │ │ │ └── StringExt.kt │ │ │ ├── media/ │ │ │ │ ├── MediaController.java │ │ │ │ ├── OutlineTextView.java │ │ │ │ ├── ScreenResolution.java │ │ │ │ ├── VideoPlayerView.java │ │ │ │ ├── callback/ │ │ │ │ │ ├── DanmukuSwitchListener.java │ │ │ │ │ ├── MediaPlayerListener.java │ │ │ │ │ └── VideoBackListener.java │ │ │ │ └── danmuku/ │ │ │ │ ├── BiliDanmukuCompressionTools.java │ │ │ │ ├── BiliDanmukuDownloadUtil.java │ │ │ │ └── BiliDanmukuParser.java │ │ │ ├── module/ │ │ │ │ ├── app/ │ │ │ │ │ ├── BrowerActivity.kt │ │ │ │ │ ├── LoginActivity.kt │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── SplashActivity.kt │ │ │ │ │ ├── up/ │ │ │ │ │ │ ├── ArchiveFragment.kt │ │ │ │ │ │ ├── BangumiFragment.kt │ │ │ │ │ │ ├── CoinsVideoFragment.kt │ │ │ │ │ │ ├── FavouriteFragment.kt │ │ │ │ │ │ ├── GroupFragment.kt │ │ │ │ │ │ ├── PlayGamesFragment.kt │ │ │ │ │ │ ├── SubmitedVideoFragment.kt │ │ │ │ │ │ └── UpDetailActivity.kt │ │ │ │ │ └── video/ │ │ │ │ │ ├── CommentFragment.kt │ │ │ │ │ ├── SummaryFragment.kt │ │ │ │ │ ├── VideoDetailActivity.kt │ │ │ │ │ └── VideoPlayerActivity.kt │ │ │ │ ├── bangumi/ │ │ │ │ │ ├── BangumiDetailActivity.kt │ │ │ │ │ ├── BangumiIndexActivity.kt │ │ │ │ │ └── BangumiScheduleActivity.kt │ │ │ │ ├── discover/ │ │ │ │ │ ├── ActivityCenterActivity.kt │ │ │ │ │ ├── AllGameActivity.kt │ │ │ │ │ ├── GameCenterActivity.kt │ │ │ │ │ ├── HomeFragment.kt │ │ │ │ │ ├── InterestActivity.kt │ │ │ │ │ ├── InterestFragment.kt │ │ │ │ │ ├── MineFragment.kt │ │ │ │ │ └── TopicCenterActivity.kt │ │ │ │ ├── entrance/ │ │ │ │ │ ├── OfflineDownloadActivity.kt │ │ │ │ │ └── VipActivity.kt │ │ │ │ ├── home/ │ │ │ │ │ ├── BaseHomeFragment.kt │ │ │ │ │ ├── ChaseBangumiFragment.kt │ │ │ │ │ ├── DiscoverFragment.kt │ │ │ │ │ ├── DynamicFragment.kt │ │ │ │ │ ├── HomeFragment.kt │ │ │ │ │ ├── LiveFragment.kt │ │ │ │ │ ├── RecommendFragment.kt │ │ │ │ │ └── RegionFragment.kt │ │ │ │ ├── recommend/ │ │ │ │ │ ├── AllStationRankActivity.kt │ │ │ │ │ └── AllStationRankFragment.kt │ │ │ │ ├── region/ │ │ │ │ │ ├── AdActivity.kt │ │ │ │ │ ├── AllRegionRankActivity.kt │ │ │ │ │ ├── AllRegionRankFragment.kt │ │ │ │ │ ├── BaseRegionActivity.kt │ │ │ │ │ ├── RegionTypeActivity.kt │ │ │ │ │ ├── RegionTypeFragment.kt │ │ │ │ │ ├── RegionTypeRecommendFragment.kt │ │ │ │ │ └── live/ │ │ │ │ │ └── LiveRegionActivity.kt │ │ │ │ └── search/ │ │ │ │ ├── ArchiveFragment.kt │ │ │ │ ├── BaseSearchFragment.kt │ │ │ │ ├── MovieFragment.kt │ │ │ │ ├── SearchActivity.kt │ │ │ │ ├── SeasonFragment.kt │ │ │ │ ├── TotalSearchActivity.kt │ │ │ │ └── UpFragment.kt │ │ │ ├── mvp/ │ │ │ │ ├── contract/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── SplashContract.kt │ │ │ │ │ │ ├── up/ │ │ │ │ │ │ │ ├── ArchiveContract.kt │ │ │ │ │ │ │ ├── FavouriteContract.kt │ │ │ │ │ │ │ ├── SubmitedVideoContract.kt │ │ │ │ │ │ │ └── UpDetailContract.kt │ │ │ │ │ │ └── video/ │ │ │ │ │ │ ├── CommentContract.kt │ │ │ │ │ │ ├── SummaryContract.kt │ │ │ │ │ │ ├── VideoDetailContract.kt │ │ │ │ │ │ └── VideoPlayerContract.kt │ │ │ │ │ ├── bangumi/ │ │ │ │ │ │ ├── BangumiDetailContract.kt │ │ │ │ │ │ ├── BangumiIndexContract.kt │ │ │ │ │ │ └── BangumiScheduleContract.kt │ │ │ │ │ ├── discover/ │ │ │ │ │ │ ├── ActivityCenterContract.kt │ │ │ │ │ │ ├── GameCenterContract.kt │ │ │ │ │ │ ├── InterestContract.kt │ │ │ │ │ │ └── TopicCenterContract.kt │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── ChaseBangumiContract.kt │ │ │ │ │ │ ├── DiscoverContract.kt │ │ │ │ │ │ ├── DynamicContract.kt │ │ │ │ │ │ ├── LiveContract.kt │ │ │ │ │ │ ├── RecommendContract.kt │ │ │ │ │ │ └── RegionContract.kt │ │ │ │ │ ├── recommend/ │ │ │ │ │ │ └── AllStationRankContract.kt │ │ │ │ │ ├── region/ │ │ │ │ │ │ ├── AllRegionRankContract.kt │ │ │ │ │ │ ├── AllRegionRankPositionContract.kt │ │ │ │ │ │ ├── RegionTypeContract.kt │ │ │ │ │ │ ├── RegionTypeRecommendContract.kt │ │ │ │ │ │ └── live/ │ │ │ │ │ │ └── LiveContract.kt │ │ │ │ │ └── search/ │ │ │ │ │ ├── ArchiveContract.kt │ │ │ │ │ ├── BaseSearchContract.kt │ │ │ │ │ ├── MovieContract.kt │ │ │ │ │ ├── SearchContract.kt │ │ │ │ │ ├── SeasonContract.kt │ │ │ │ │ ├── TotalSearchContract.kt │ │ │ │ │ └── UpContract.kt │ │ │ │ └── presenter/ │ │ │ │ ├── app/ │ │ │ │ │ ├── NothingPresenter.kt │ │ │ │ │ ├── SplashPresenter.kt │ │ │ │ │ ├── up/ │ │ │ │ │ │ ├── ArchivePresenter.kt │ │ │ │ │ │ ├── FavouritePresenter.kt │ │ │ │ │ │ ├── SubmitedVideoPresenter.kt │ │ │ │ │ │ └── UpDetailPresenter.kt │ │ │ │ │ └── video/ │ │ │ │ │ ├── CommentPresenter.kt │ │ │ │ │ ├── SummaryPresenter.kt │ │ │ │ │ ├── VideoDetailPresenter.kt │ │ │ │ │ └── VideoPlayerPresenter.kt │ │ │ │ ├── bangumi/ │ │ │ │ │ ├── BangumiDetailPresenter.kt │ │ │ │ │ ├── BangumiIndexPresenter.kt │ │ │ │ │ └── BangumiSchedulePresenter.kt │ │ │ │ ├── discover/ │ │ │ │ │ ├── ActivityCenterPresenter.kt │ │ │ │ │ ├── GameCenterPresenter.kt │ │ │ │ │ ├── InterestPresenter.kt │ │ │ │ │ └── TopicCenterPresenter.kt │ │ │ │ ├── home/ │ │ │ │ │ ├── ChaseBangumiPresenter.kt │ │ │ │ │ ├── DiscoverPresenter.kt │ │ │ │ │ ├── DynamicPresenter.kt │ │ │ │ │ ├── LivePresenter.kt │ │ │ │ │ ├── RecommendPresenter.kt │ │ │ │ │ └── RegionPresenter.kt │ │ │ │ ├── recommend/ │ │ │ │ │ └── AllStationRankPresenter.kt │ │ │ │ ├── region/ │ │ │ │ │ ├── AllRegionRankPositionPresenter.kt │ │ │ │ │ ├── AllRegionRankPresenter.kt │ │ │ │ │ ├── LivePresenter.kt │ │ │ │ │ ├── RegionTypePresenter.kt │ │ │ │ │ └── RegionTypeRecommendPresenter.kt │ │ │ │ └── search/ │ │ │ │ ├── ArchivePresenter.kt │ │ │ │ ├── MoviePresenter.kt │ │ │ │ ├── SearchPresenter.kt │ │ │ │ ├── SeasonPresenter.kt │ │ │ │ ├── TotalSearchPresenter.kt │ │ │ │ └── UpPresenter.kt │ │ │ ├── network/ │ │ │ │ ├── api/ │ │ │ │ │ ├── ApiService.kt │ │ │ │ │ ├── AppService.kt │ │ │ │ │ ├── BangumiService.kt │ │ │ │ │ ├── Im9Service.kt │ │ │ │ │ ├── LiveService.kt │ │ │ │ │ └── RankService.kt │ │ │ │ ├── exception/ │ │ │ │ │ └── ApiException.kt │ │ │ │ ├── helper/ │ │ │ │ │ ├── OkHttpHelper.kt │ │ │ │ │ ├── RetrofitHelper.kt │ │ │ │ │ └── UrlHelper.kt │ │ │ │ ├── response/ │ │ │ │ │ ├── HttpListResponse.kt │ │ │ │ │ └── HttpResponse.kt │ │ │ │ └── support/ │ │ │ │ ├── ApiConstants.kt │ │ │ │ └── LoggerInterceptor.kt │ │ │ ├── rx/ │ │ │ │ ├── RxBus.kt │ │ │ │ └── RxUtils.kt │ │ │ ├── utils/ │ │ │ │ ├── AppUtils.java │ │ │ │ ├── ClipboardUtils.java │ │ │ │ ├── CloseUtils.java │ │ │ │ ├── CrashHandler.java │ │ │ │ ├── DimenUtils.java │ │ │ │ ├── EmptyUtils.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── IMEUtils.java │ │ │ │ ├── IOUtils.java │ │ │ │ ├── JsonUtils.java │ │ │ │ ├── LogUtils.java │ │ │ │ ├── NumberUtils.java │ │ │ │ ├── PrefsUtils.java │ │ │ │ ├── SnackbarUtils.java │ │ │ │ ├── SnakBarUtils.java │ │ │ │ ├── SpanUtils.java │ │ │ │ ├── StatusBarFontUtil.java │ │ │ │ ├── StorageUtils.java │ │ │ │ ├── TimeUtils.java │ │ │ │ ├── ToastUtils.java │ │ │ │ ├── net/ │ │ │ │ │ ├── NetworkService.java │ │ │ │ │ └── NetworkUtils.java │ │ │ │ ├── sdcard/ │ │ │ │ │ ├── ConvertUtils.java │ │ │ │ │ ├── MemoryConstants.java │ │ │ │ │ └── SDCardUtils.java │ │ │ │ └── time/ │ │ │ │ ├── FormatUtils.java │ │ │ │ ├── TimeConstants.java │ │ │ │ └── TimeUtils.java │ │ │ └── widget/ │ │ │ ├── CircleImageView.java │ │ │ ├── CustomLoadMoreView.java │ │ │ ├── DropDownMenu.java │ │ │ ├── FlowLayout.java │ │ │ ├── NoScrollLinearLayoutManager.java │ │ │ ├── NoScrollViewPager.java │ │ │ ├── ProgressWheel.java │ │ │ ├── divider/ │ │ │ │ ├── FlexibleDividerDecoration.java │ │ │ │ ├── HorizontalDividerItemDecoration.java │ │ │ │ └── VerticalDividerItemDecoration.java │ │ │ ├── expand/ │ │ │ │ ├── ExpandableLayout.java │ │ │ │ ├── FastOutSlowInInterpolator.java │ │ │ │ └── LookupTableInterpolator.java │ │ │ ├── flowlayout/ │ │ │ │ ├── FlowLayout.java │ │ │ │ ├── TagAdapter.java │ │ │ │ ├── TagFlowLayout.java │ │ │ │ └── TagView.java │ │ │ ├── progress/ │ │ │ │ ├── NumberProgressBar.java │ │ │ │ └── OnProgressBarListener.java │ │ │ ├── section/ │ │ │ │ ├── HeadOrFooterSection.java │ │ │ │ ├── Section.java │ │ │ │ ├── SectionedRVAdapter.java │ │ │ │ ├── StatelessSection.java │ │ │ │ └── ViewHolder.java │ │ │ └── statusbar/ │ │ │ └── StatusBarUtil.java │ │ └── res/ │ │ ├── anim/ │ │ │ ├── dd_mask_in.xml │ │ │ ├── dd_mask_out.xml │ │ │ ├── dd_menu_in.xml │ │ │ └── dd_menu_out.xml │ │ ├── color/ │ │ │ ├── select_bangumi_detail_index_bg.xml │ │ │ ├── select_bangumi_detail_index_title_bg.xml │ │ │ └── selector_tv_follow.xml │ │ ├── drawable/ │ │ │ ├── anim_search_loading.xml │ │ │ ├── anim_video_loading.xml │ │ │ ├── btn_more_pink.xml │ │ │ ├── btn_more_white.xml │ │ │ ├── default_line.xml │ │ │ ├── round_wihte_bg.xml │ │ │ ├── selector_bangumi_detail_bt_bg.xml │ │ │ ├── selector_bangumi_detail_season_bg.xml │ │ │ ├── shape_bangumi_index_green_bg.xml │ │ │ ├── shape_bangumi_index_pink_bg.xml │ │ │ ├── shape_bangumi_index_yellow_bg.xml │ │ │ ├── shape_btn_game_center_bg.xml │ │ │ ├── shape_btn_rank_bg.xml │ │ │ ├── shape_corner_btn.xml │ │ │ ├── shape_count_down.xml │ │ │ ├── shape_dots_default.xml │ │ │ ├── shape_dots_select.xml │ │ │ ├── shape_gradient.xml │ │ │ ├── shape_img_count_bg.xml │ │ │ ├── shape_item_decoration.xml │ │ │ ├── shape_login_input_rounded_bg.xml │ │ │ ├── shape_shadow_gradient.xml │ │ │ ├── shape_shadow_normal_reserve.xml │ │ │ ├── shape_tv_electricize.xml │ │ │ ├── shape_tv_favourite.xml │ │ │ ├── shape_tv_new_tag.xml │ │ │ ├── shape_vip_btn_bg.xml │ │ │ ├── shape_white_border.xml │ │ │ ├── ssdk_oks_classic_platform_cell_back.xml │ │ │ ├── ssdk_oks_classic_progressbar.xml │ │ │ ├── tv_tags_bg.xml │ │ │ └── videoplayer_erect_icon_round.xml │ │ ├── drawable-mdpi/ │ │ │ └── anim_video_play.xml │ │ ├── layout/ │ │ │ ├── activity_ad.xml │ │ │ ├── activity_bangumi_detail.xml │ │ │ ├── activity_bangumi_schedule.xml │ │ │ ├── activity_brower.xml │ │ │ ├── activity_game_center.xml │ │ │ ├── activity_interest.xml │ │ │ ├── activity_live.xml │ │ │ ├── activity_live_region.xml │ │ │ ├── activity_login.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_offline_download.xml │ │ │ ├── activity_region_type.xml │ │ │ ├── activity_scrolling.xml │ │ │ ├── activity_search.xml │ │ │ ├── activity_splash.xml │ │ │ ├── activity_topic_center.xml │ │ │ ├── activity_total_search.xml │ │ │ ├── activity_up_detail.xml │ │ │ ├── activity_video_detail.xml │ │ │ ├── activity_video_detail1.xml │ │ │ ├── activity_video_player.xml │ │ │ ├── activity_vip.xml │ │ │ ├── app_bar_main.xml │ │ │ ├── common_entrance_toolbar.xml │ │ │ ├── common_item_recycler.xml │ │ │ ├── common_layout_error.xml │ │ │ ├── common_recycler.xml │ │ │ ├── common_refresh_recycler.xml │ │ │ ├── common_toolbar.xml │ │ │ ├── content_scrolling.xml │ │ │ ├── fragment_comment.xml │ │ │ ├── fragment_game_center.xml │ │ │ ├── fragment_home.xml │ │ │ ├── fragment_home_chase_bangumi.xml │ │ │ ├── fragment_home_discover.xml │ │ │ ├── fragment_home_dynamic.xml │ │ │ ├── fragment_home_live.xml │ │ │ ├── fragment_home_recommend.xml │ │ │ ├── fragment_home_region.xml │ │ │ ├── fragment_interest.xml │ │ │ ├── fragment_main_home.xml │ │ │ ├── fragment_mine.xml │ │ │ ├── fragment_region_type.xml │ │ │ ├── fragment_region_type_recommend.xml │ │ │ ├── fragment_search_archive.xml │ │ │ ├── fragment_search_movie.xml │ │ │ ├── fragment_search_season.xml │ │ │ ├── fragment_search_up.xml │ │ │ ├── fragment_summary.xml │ │ │ ├── fragment_up_archive.xml │ │ │ ├── fragment_up_bangumi.xml │ │ │ ├── fragment_up_coins_video.xml │ │ │ ├── fragment_up_favourite.xml │ │ │ ├── fragment_up_group.xml │ │ │ ├── fragment_up_play_games.xml │ │ │ ├── fragment_up_submited_video.xml │ │ │ ├── item_activity_center.xml │ │ │ ├── item_all_region.xml │ │ │ ├── item_bangumi_detail_episodes.xml │ │ │ ├── item_bangumi_detail_recommend.xml │ │ │ ├── item_bangumi_detail_seasons.xml │ │ │ ├── item_game_center_book_gift.xml │ │ │ ├── item_home_chase_body.xml │ │ │ ├── item_home_dynamic.xml │ │ │ ├── item_home_region_activity_center.xml │ │ │ ├── item_home_region_entrance.xml │ │ │ ├── item_interest_category.xml │ │ │ ├── item_live_entrance.xml │ │ │ ├── item_search_movie.xml │ │ │ ├── item_search_season.xml │ │ │ ├── item_search_up.xml │ │ │ ├── item_topic_center.xml │ │ │ ├── item_up_detail_archive_favourite.xml │ │ │ ├── item_up_detail_favourite.xml │ │ │ ├── layout_bangumi_detail_contracted.xml │ │ │ ├── layout_banner.xml │ │ │ ├── layout_empty.xml │ │ │ ├── layout_hot_tags_item.xml │ │ │ ├── layout_item_bangumi_detail_comment.xml │ │ │ ├── layout_item_bangumi_detail_des.xml │ │ │ ├── layout_item_bangumi_detail_head.xml │ │ │ ├── layout_item_bangumi_detail_info.xml │ │ │ ├── layout_item_bangumi_detail_more.xml │ │ │ ├── layout_item_bangumi_detail_recommend.xml │ │ │ ├── layout_item_bangumi_detail_recycler.xml │ │ │ ├── layout_item_bangumi_index_body.xml │ │ │ ├── layout_item_bangumi_index_head.xml │ │ │ ├── layout_item_bangumi_schedule_body.xml │ │ │ ├── layout_item_bangumi_schedule_footer.xml │ │ │ ├── layout_item_bangumi_schedule_head.xml │ │ │ ├── layout_item_bangumi_schedule_header.xml │ │ │ ├── layout_item_game_center_body.xml │ │ │ ├── layout_item_game_center_book_gift.xml │ │ │ ├── layout_item_game_center_footer.xml │ │ │ ├── layout_item_game_center_head.xml │ │ │ ├── layout_item_game_center_user.xml │ │ │ ├── layout_item_home_chase_bangumi_index.xml │ │ │ ├── layout_item_home_chase_body.xml │ │ │ ├── layout_item_home_chase_footer.xml │ │ │ ├── layout_item_home_chase_head.xml │ │ │ ├── layout_item_home_live_body.xml │ │ │ ├── layout_item_home_live_body_mul.xml │ │ │ ├── layout_item_home_live_entrance.xml │ │ │ ├── layout_item_home_live_footer.xml │ │ │ ├── layout_item_home_live_head.xml │ │ │ ├── layout_item_home_recommend_body.xml │ │ │ ├── layout_item_home_region_activity_center.xml │ │ │ ├── layout_item_home_region_body.xml │ │ │ ├── layout_item_home_region_entrance.xml │ │ │ ├── layout_item_home_region_footer.xml │ │ │ ├── layout_item_home_region_head.xml │ │ │ ├── layout_item_home_region_topic.xml │ │ │ ├── layout_item_interest_categroty.xml │ │ │ ├── layout_item_interest_head.xml │ │ │ ├── layout_item_interest_item.xml │ │ │ ├── layout_item_region_body.xml │ │ │ ├── layout_item_region_footer.xml │ │ │ ├── layout_item_region_head.xml │ │ │ ├── layout_item_region_recommend_entrance.xml │ │ │ ├── layout_item_region_type_body.xml │ │ │ ├── layout_item_region_type_head.xml │ │ │ ├── layout_item_search_archive.xml │ │ │ ├── layout_item_search_archive_movie.xml │ │ │ ├── layout_item_search_archive_movie_more.xml │ │ │ ├── layout_item_search_archive_seanson_more.xml │ │ │ ├── layout_item_search_archive_season.xml │ │ │ ├── layout_item_search_archive_video.xml │ │ │ ├── layout_item_up_detail_archive_favourite.xml │ │ │ ├── layout_item_up_detail_archive_head.xml │ │ │ ├── layout_item_up_detail_archive_live.xml │ │ │ ├── layout_item_up_detail_archive_submited_video_item.xml │ │ │ ├── layout_item_up_submited_video_electricize.xml │ │ │ ├── layout_item_up_submited_video_item.xml │ │ │ ├── layout_item_video_detail_comment.xml │ │ │ ├── layout_item_video_detail_more.xml │ │ │ ├── layout_item_video_detail_summary_des.xml │ │ │ ├── layout_item_video_detail_summary_owner.xml │ │ │ ├── layout_item_video_detail_summary_relate.xml │ │ │ ├── layout_item_video_detail_summary_relate_head.xml │ │ │ ├── layout_load_more.xml │ │ │ ├── layout_loading.xml │ │ │ ├── layout_main_toolbar.xml │ │ │ ├── layout_media_controller.xml │ │ │ ├── layout_recommend_banner.xml │ │ │ ├── layout_search_view.xml │ │ │ └── nav_header_main.xml │ │ ├── menu/ │ │ │ ├── menu_brower.xml │ │ │ ├── menu_interest.xml │ │ │ ├── menu_main.xml │ │ │ ├── menu_off.xml │ │ │ ├── menu_region.xml │ │ │ ├── menu_scrolling.xml │ │ │ └── navigation_main.xml │ │ ├── values/ │ │ │ ├── arrays.xml │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ids.xml │ │ │ ├── ssdk_instapaper_strings.xml │ │ │ ├── ssdk_oks_color_drawables.xml │ │ │ ├── ssdk_oks_strings.xml │ │ │ ├── ssdk_strings.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-en/ │ │ │ ├── ssdk_oks_strings.xml │ │ │ └── ssdk_strings.xml │ │ └── values-v19/ │ │ ├── dimens.xml │ │ └── styles.xml │ └── test/ │ └── java/ │ └── com/ │ └── yoyiyi/ │ └── soleil/ │ └── ExampleUnitTest.kt ├── build.gradle ├── gradle/ │ └── wrapper/ │ └── gradle-wrapper.properties ├── gradle.properties └── settings.gradle ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ # bilisoleil An unofficial bilibili client for android ## Remark 该项目为仿b站项目的kotlin版,大部分界面采用kotlin编程,由于本人水平有限,有些kotlin写法不规范,后期有时间会逐步完善,和 原项目一样采用rxjava2+okhttp+retrofit+mvp+dagger2。 #### java版地址:[bilisoleil](https://github.com/yoyiyi/bilisoleil) #### kotlin版地址:[bilisoleil-kotlin](https://github.com/yoyiyi/bilisoleil-kotlin) ## Screenshots ![](https://github.com/yoyiyi/bilisoleil/blob/master/art/en%20(29).png?raw=true) ## Thanks to the open source project * [bilibili-android-client](https://github.com/HotBitmapGG/bilibili-android-client) * [RxJava](https://github.com/ReactiveX/RxJava) * [RxAndroid](https://github.com/ReactiveX/RxAndroid) * [RxBinding](https://github.com/JakeWharton/RxBinding) * [RxLifecycle](https://github.com/trello/RxLifecycle) * [okhttp](https://github.com/square/okhttp) * [dagger](https://github.com/square/dagger) * [retrofit](https://github.com/square/retrofit) * [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper) * [ijkplayer](https://github.com/Bilibili/ijkplayer) * [DanmakuFlameMaster](https://github.com/Bilibili/DanmakuFlameMaster) * [butterknife](https://github.com/JakeWharton/butterknife) * [glide](https://github.com/bumptech/glide) * [MaterialSearchView](https://github.com/MiguelCatalan/MaterialSearchView) * [FlycoTabLayout](https://github.com/H07000223/FlycoTabLayout) * [FlowLayout](https://github.com/hongyangAndroid/FlowLayout) * [banner](https://github.com/youth5201314/banner) ## License Copyright 2017 yoyiyi Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: app/build.gradle ================================================ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 25 buildToolsVersion '26.0.2' defaultConfig { applicationId "com.yoyiyi.soleil" minSdkVersion 17 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } kapt { generateStubs = true } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:25.4.0' testImplementation 'junit:junit:4.12' implementation 'com.android.support.constraint:constraint-layout:1.0.2' //anko // compile "org.jetbrains.anko:anko-common:0.9.1a" // compile "org.jetbrains.anko:anko-sdk15:0.9.1a" compile "org.jetbrains.anko:anko:0.10.1" compile "com.android.support:multidex:1.0.1" //ui compile 'com.android.support:design:25.4.0' compile 'com.android.support:recyclerview-v7:25.4.0' compile 'com.android.support:cardview-v7:25.4.0' //rxjava2 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //compile 'io.reactivex.rxjava2:rxkotlin:2.1.0' compile 'io.reactivex.rxjava2:rxjava:2.0.8' //permissions compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' //dagger2 compile 'com.google.dagger:dagger:2.10' kapt 'com.google.dagger:dagger-compiler:2.10' //glide compile 'com.github.bumptech.glide:glide:3.7.0' compile 'jp.wasabeef:glide-transformations:2.0.2' //network compile 'com.squareup.okhttp3:okhttp:3.7.0' compile 'com.squareup.okhttp3:logging-interceptor:3.7.0' compile 'com.squareup.retrofit2:retrofit:2.2.0' compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' compile 'com.squareup.retrofit2:converter-gson:2.2.0' //rxbinding compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' //rxlifecycle compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1' compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1' //Flycotablayout compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar' compile 'com.github.hymanme.tagflowlayout:tagflowlayout:0.2.2' //轮播条 compile 'com.youth.banner:banner:1.4.9' //搜索框 compile 'com.miguelcatalan:materialsearchview:1.4.0' //BaseRecyclerViewAdapterHelper compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.16' compile 'com.miguelcatalan:materialsearchview:1.4.0' //ijk compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.0' compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.0' compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.0' compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.0' //烈焰弹幕使 compile 'com.github.ctiao:DanmakuFlameMaster:0.5.6' //调试工具 compile 'com.facebook.stetho:stetho:1.4.2' compile 'com.facebook.stetho:stetho-okhttp3:1.4.2' compile 'com.orhanobut:logger:1.15' compile files('libs/ShareSDK-Wechat-Moments-2.8.3.jar') compile files('libs/ShareSDK-Wechat-Favorite-2.8.3.jar') compile files('libs/ShareSDK-Wechat-Core-2.8.3.jar') compile files('libs/ShareSDK-Wechat-2.8.3.jar') compile files('libs/ShareSDK-Twitter-2.8.3.jar') compile files('libs/ShareSDK-TencentWeibo-2.8.3.jar') compile files('libs/ShareSDK-SinaWeibo-2.8.3.jar') compile files('libs/ShareSDK-ShortMessage-2.8.3.jar') compile files('libs/ShareSDK-QZone-2.8.3.jar') compile files('libs/ShareSDK-QQ-2.8.3.jar') compile files('libs/ShareSDK-Facebook-2.8.3.jar') compile files('libs/ShareSDK-Email-2.8.3.jar') compile files('libs/ShareSDK-Core-2.8.3.jar') compile files('libs/MobTools-2017.0412.1554.jar') compile files('libs/MobCommons-2017.0412.1554.jar') compile 'org.jsoup:jsoup:1.10.3' } ================================================ FILE: app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in D:\MySoft\Android\SDK/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the proguardFiles # directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # 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 ================================================ FILE: app/src/androidTest/java/com/yoyiyi/soleil/ExampleInstrumentedTest.kt ================================================ package com.soleil.bilisoleil import android.support.test.InstrumentationRegistry import android.support.test.runner.AndroidJUnit4 import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith /** * Instrumented test, which will execute on an Android device. * * See [testing documentation](http://d.android.com/tools/testing). */ @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getTargetContext() assertEquals("com.soleil.bilisoleil", appContext.packageName) } } ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/assets/ShareSDK.xml ================================================ // ================================================ FILE: app/src/main/assets/dynamic.json ================================================ {"code": 0, "data": { "item": [ { "coin": 1, "cover": "http://i1.hdslb.com/bfs/archive/9aef9e4be56c725969d99a14558c03e4d5375c70.jpg", "ctime": 1496382826, "danmaku": 14, "desc": "Youtube原视频:https://www.youtube.com/watch?v=TtgY2N-_-Wg来源:pompomtoys", "duration": 885, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "11011872", "play": 62, "reply": 5, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】切割动力沙爱心叠叠乐", "tname": "手工", "uri": "bilibili://video/11011872" }, { "count": 40, "cover": "http://i0.hdslb.com/bfs/archive/9227c88e6d79142d30708d46d6ba720def16c4bd.jpg", "ctime": 1496376000, "danmaku": 546, "goto": "up_bangumi", "index": "8", "index_title": "治疗", "param": "6159", "play": 11784, "title": "妖神记", "type": 2, "updates": 107006, "uri": "bilibili://bangumi/season/6159" }, { "count": 12, "cover": "http://i1.hdslb.com/bfs/archive/7646ad33a79e4a6c7e97efed115042ae20d03f4f.jpg", "ctime": 1496368800, "danmaku": 209, "goto": "up_bangumi", "index": "02", "index_title": "食神·附体?!", "param": "6186", "play": 13365, "title": "食神魂", "type": 2, "updates": 108127, "uri": "bilibili://bangumi/season/6186" }, { "coin": 3, "cover": "http://i2.hdslb.com/bfs/archive/5165fa5beb040128dcbd62328788996ca6ac13d3.jpg", "ctime": 1496326508, "danmaku": 11, "desc": "转载自YouTube原po:Touko ASMR原标题:【音フェチ】春巻き/ Spring Rolls【ASMR Eating Sounds】", "duration": 461, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 42, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10999875", "play": 1773, "recent": [ { "coin": 2, "cover": "http://i2.hdslb.com/bfs/archive/fb524c1ddb629a55d1c155de3a0022636696ffe7.jpg", "ctime": 1496325853, "danmaku": 8, "desc": "YouTube转载自YouTube原po:아내의 식탁 Wife's Cuisine原标题:근사한 브런치, 에그베네딕트 : Egg benedict with hollandaise sauce l Brunch menu [아내의 식탁]", "duration": 331, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 48, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "11000033", "play": 410, "reply": 11, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【吃早餐吧】鸡蛋松饼配荷兰酱(蛋黄酱)|早午餐食谱", "tname": "美食圈", "uri": "bilibili://video/11000033" }, { "coin": 2, "cover": "http://i1.hdslb.com/bfs/archive/069cf42fc9a4514e966231d63923d6f7b2a29ae3.jpg", "ctime": 1496325587, "danmaku": 3, "desc": "Youtube原视频:https://www.youtube.com/watch?v=Y38s1xjgcvE来源:Tastemade", "duration": 67, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 122, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10999778", "play": 1115, "reply": 8, "share": 4, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】【Tastemade】奶油凤尾鱼炸面包团", "tname": "美食圈", "uri": "bilibili://video/10999778" } ], "recent_count": 2, "reply": 21, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【咀嚼音ASMR】Touko小姐姐吃炸春卷~高质量收音好无底噪", "tname": "美食圈", "uri": "bilibili://video/10999875" }, { "coin": 5, "cover": "http://i2.hdslb.com/bfs/archive/9f7a1854e7adc24715eeecdc6da1b30e0ca73b9f.jpg", "ctime": 1496306430, "danmaku": 76, "desc": "YouTube原视频:https://www.youtube.com/watch?v=jYaYc5u-LYA来源:hanse", "duration": 264, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 144, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10991927", "play": 1450, "recent": [ { "coin": 2, "cover": "http://i1.hdslb.com/bfs/archive/125bb5984efb2e369a45cadb88c6d6a473650a01.jpg", "ctime": 1496305743, "danmaku": 27, "desc": "YouTubehttps://www.youtube.com/watch?v=j2N0Aks8bQ0", "duration": 909, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 82, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10991729", "play": 1070, "reply": 12, "share": 3, "tag": { "count": { "atten": 76189 }, "tag_id": 1283883, "tag_name": "趣味科普人文" }, "tid": 124, "title": "16个令人惊叹的魔术小把戏!!", "tname": "趣味科普人文", "uri": "bilibili://video/10991729" } ], "recent_count": 1, "reply": 23, "share": 9, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 174, "title": "【耳机党福利】巧克力冰淇淋镜面蛋糕 (ASMR)", "tname": "其他", "uri": "bilibili://video/10991927" }, { "coin": 13, "cover": "http://i2.hdslb.com/bfs/archive/b93be0c23489a6c5962e6ae2e8a9f2bb1a994245.jpg", "ctime": 1496301991, "danmaku": 1383, "desc": "YouTube原视频:https://www.youtube.com/watch?v=gfFBcVQrwlw来源:pompomtoys", "duration": 959, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 155, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10990452", "play": 10757, "reply": 102, "share": 15, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】制作马桶透明缤纷史莱姆水球然后捏爆", "tname": "手工", "uri": "bilibili://video/10990452" }, { "coin": 6, "cover": "http://i0.hdslb.com/bfs/archive/072c71ab3ec0223ca5fcc28238629dce75132c01.jpg", "ctime": 1496291056, "danmaku": 3, "desc": "逆天而行最新预告出炉啦~~一直很想写这种IF线的故事,但这IF又不会太过美好历史剧本神马的真的太难写了(つд⊂)这部是东吴主场,策瑜主线(゚∀。)副甘凌跟蒙逊曹郭等西皮(゚∀。)慢慢产粮中,敬请期待~~", "duration": 48, "face": "http://i0.hdslb.com/bfs/face/947914911aa5e224507ce278281fcd1588d4f78b.jpg", "goto": "av", "is_atten": 1, "mid": 85595871, "name": "喵仔ユミ", "param": "10987736", "play": 111, "reply": 17, "share": 1, "tag": { "count": { "atten": 6382 }, "tag_id": 10384, "tag_name": "真三国无双" }, "tid": 121, "title": "【真三国无双】最新预告-逆天而行﹝策瑜主场﹞", "tname": "GMV", "uri": "bilibili://video/10987736" }, { "coin": 4, "cover": "http://i2.hdslb.com/bfs/archive/d019cf18fa630ee652a3527dbf3fd52203198afd.jpg", "ctime": 1496288668, "danmaku": 6, "desc": "YouTube原视频:https://www.youtube.com/watch?v=Lt3YNDYFU2I&t=0s来源:tastemade", "duration": 61, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 34, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10986771", "play": 763, "recent": [ { "coin": 2, "cover": "http://i1.hdslb.com/bfs/archive/4c1a5dcb4227b65c81277951bd81a441ae2383f6.jpg", "ctime": 1496287898, "danmaku": 19, "desc": "YouTube原视频:https://www.youtube.com/watch?v=8yq2HrRp_z0来源:ビデリシャス - おいしい動画 -", "duration": 90, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 242, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10986699", "play": 1357, "reply": 20, "share": 3, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】教你制作法式柠檬周末蛋糕", "tname": "美食圈", "uri": "bilibili://video/10986699" } ], "recent_count": 1, "reply": 23, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】用几块糖霜饼干搭出了可爱的日本昭和风过家家小房子~", "tname": "美食圈", "uri": "bilibili://video/10986771" }, { "cover": "http://i1.hdslb.com/bfs/archive/63173bc3c0a5e2aa612090a0042e70c1eae77c8c.jpg", "ctime": 1496267053, "danmaku": 7, "desc": "转载自YouTube原po:筋肉料理人の簡単レシピ、魚料理原标题:ニラ玉スパゲティ", "duration": 246, "face": "http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 57, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10983441", "play": 722, "recent": [ { "coin": 20, "cover": "http://i1.hdslb.com/bfs/archive/e2dbd8272ced842547a39d8015b7835d1db321d0.jpg", "ctime": 1496263410, "danmaku": 1198, "desc": "YouTube原视频:https://www.youtube.com/watch?v=6q0lLZCZTFg来源:pompomtoys", "duration": 1105, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 154, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10983294", "play": 14733, "reply": 98, "share": 18, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】制作一瓶七彩大鼻涕史莱姆可乐", "tname": "手工", "uri": "bilibili://video/10983294" } ], "recent_count": 1, "reply": 12, "share": 3, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【筋肉料理人的简易食谱】韭菜鸡蛋炒意面", "tname": "美食圈", "uri": "bilibili://video/10983441" }, { "coin": 7, "cover": "http://i2.hdslb.com/bfs/archive/286dfa93d65021ee70e2dca19c9ee84bfdedc25a.jpg", "ctime": 1496235411, "danmaku": 36, "desc": "YouTube原视频:https://www.youtube.com/watch?v=9PFono26O_o来源:MINEE EATS", "duration": 1402, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 97, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10974088", "play": 2700, "recent": [ { "coin": 19, "cover": "http://i2.hdslb.com/bfs/archive/fe660b9c712e8495fd36aa09cb2c1f9034fbde60.jpg", "ctime": 1496233796, "danmaku": 1840, "desc": "YouTube原视频:https://www.youtube.com/watch?v=_-QF-6mLEks来源:pompomtoys", "duration": 846, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 199, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10973792", "play": 32503, "reply": 182, "share": 28, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】制作一瓶动力沙芬达汽水", "tname": "手工", "uri": "bilibili://video/10973792" }, { "coin": 2, "cover": "http://i2.hdslb.com/bfs/archive/f52e31dfc9fe8ac848a6e9fedcfcf64837c74f9b.jpg", "ctime": 1496232305, "danmaku": 43, "desc": "YouTube原视频:https://www.youtube.com/watch?v=9PFono26O_o来源:MINEE EATS", "duration": 1571, "face": "http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 19, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10973974", "play": 1932, "reply": 20, "share": 1, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【饿哭也要看他吃】奔驰小哥咀嚼音ASMR福利!喝滋补参鸡汤+忘情啃鸡骨头", "tname": "美食圈", "uri": "bilibili://video/10973974" } ], "recent_count": 2, "reply": 42, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【咀嚼音ASMR】收音超好毫无底噪,韩国小姐姐嚼饼干~嘎嘣脆!", "tname": "美食圈", "uri": "bilibili://video/10974088" }, { "coin": 4, "cover": "http://i2.hdslb.com/bfs/archive/3a30060961a15d04498992705ab775cca22750eb.jpg", "ctime": 1496231540, "danmaku": 9, "desc": "YouTube原视频:https://www.youtube.com/watch?v=P2aICLkB6b4来源:杨桃美食网", "duration": 59, "face": "http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 316, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10973894", "play": 4640, "recent": [ { "cover": "http://i0.hdslb.com/bfs/archive/af3bafe8800673a381348c1f0720858add9cf462.jpg", "ctime": 1496229527, "danmaku": 19, "desc": "Youtube原视频:https://www.youtube.com/watch?v=Fhlh6Lbjl5w来源:The SCOOP", "duration": 506, "face": "http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 30, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10973228", "play": 322, "reply": 11, "share": 1, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【魔法料理厨房】萌到舍不得吃的唐老鸭黛西马卡龙", "tname": "美食圈", "uri": "bilibili://video/10973228" }, { "coin": 3, "cover": "http://i2.hdslb.com/bfs/archive/759aab1a2c4578feac359bf40b58ccb9619ab589.jpg", "ctime": 1496228789, "danmaku": 24, "desc": "YouTube原视频:https://www.youtube.com/watch?v=tmHIDiUve10来源:cooking tree", "duration": 317, "face": "http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 70, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10973096", "play": 890, "reply": 14, "share": 3, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【耳机党福利】奥利奥冰淇淋夹心三明治 (ASMR)", "tname": "美食圈", "uri": "bilibili://video/10973096" } ], "recent_count": 2, "reply": 24, "share": 12, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【一分钟快手料理】家常牛肉面,大呼过瘾的好味道!", "tname": "美食圈", "uri": "bilibili://video/10973894" }, { "coin": 10, "cover": "http://i2.hdslb.com/bfs/archive/235588cc4f535463ae1a44acd643f667c7285344.jpg", "ctime": 1496211236, "danmaku": 789, "desc": "YouTube原视频:https://www.youtube.com/watch?v=zbjWxwLCg28来源:pompomtoys", "duration": 810, "face": "http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 92, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10966949", "play": 14260, "reply": 106, "share": 14, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】白花花雪花泥大屁股流出各色史莱姆液体", "tname": "手工", "uri": "bilibili://video/10966949" }, { "coin": 5, "cover": "http://i1.hdslb.com/bfs/archive/656d2dface08d8a2a2864f1c9af90141a6ba3721.jpg", "ctime": 1496194271, "danmaku": 13, "desc": "YouTube原视频:https://www.youtube.com/watch?v=VcjmqrCJYm4来源:Tasty", "duration": 83, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 152, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10962203", "play": 1200, "reply": 11, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】【Tasty】超简单巧克力甜甜圈", "tname": "美食圈", "uri": "bilibili://video/10962203" }, { "coin": 6, "cover": "http://i2.hdslb.com/bfs/archive/2afce63b96e96111a69bd4e1543ca4df4dcf8d5a.jpg", "ctime": 1496177330, "danmaku": 1268, "desc": "YouTube原视频:https://www.youtube.com/watch?v=AM5ewKmXEiw来源:pompomtoys", "duration": 1128, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 101, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10959883", "play": 14509, "recent": [ { "coin": 1, "cover": "http://i2.hdslb.com/bfs/archive/7b2c9c48b15476ed345de5ba32b2134c89fbd198.jpg", "ctime": 1496176745, "danmaku": 3, "desc": "YouTube原视频: https://www.youtube.com/watch?v=1xn2l1uUQEU&t=0s来源:Tasty Japan", "duration": 43, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 85, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10959798", "play": 1053, "reply": 6, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】【Tasty】脆皮米果炸鸡", "tname": "美食圈", "uri": "bilibili://video/10959798" }, { "cover": "http://i0.hdslb.com/bfs/archive/8450d4ddfca0e990bdeb66b02afca5bcfb4fde84.jpg", "ctime": 1496176610, "danmaku": 4, "desc": "YouTube转载自YouTube原po:cooking tree原标题:달콤한 바나나가 통으로! 바나나 초코 롤케이크 만들기 : Banana chocolate roll cake Recipe : バナナロールケーキ -Cookingtree쿠킹트리", "duration": 269, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 49, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10959768", "play": 452, "reply": 4, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 174, "title": "【耳骚料理ASMR】耳机党福利!香蕉巧克力蛋糕卷", "tname": "其他", "uri": "bilibili://video/10959768" }, { "coin": 2, "cover": "http://i1.hdslb.com/bfs/archive/c6940c152d2db13ceaedfe80b0633be075dbbd8e.jpg", "ctime": 1496176167, "danmaku": 1, "desc": "YouTube原视频:https://www.youtube.com/watch?v=UmhtavyZAlk&t=0s来源:tastemade", "duration": 47, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 102, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10959685", "play": 978, "reply": 9, "share": 5, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】【Tastemade】薯片金枪鱼蛋黄酱土豆沙拉", "tname": "美食圈", "uri": "bilibili://video/10959685" }, { "coin": 6, "cover": "http://i1.hdslb.com/bfs/archive/6a939c97b5c8f0bf29900c02806cb4948bef66f1.jpg", "ctime": 1496175748, "danmaku": 23, "desc": "YouTube原视频: https://www.youtube.com/watch?v=4-uKNM7vmYs&t=0s来源:tastemade", "duration": 78, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 276, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10959599", "play": 2525, "reply": 12, "share": 5, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】【Tastemade】多彩缤纷的小可爱番茄芝士蛋糕", "tname": "美食圈", "uri": "bilibili://video/10959599" }, { "coin": 1, "cover": "http://i1.hdslb.com/bfs/archive/e1835322eb741ce520888030e6a0ca16bd1a0932.jpg", "ctime": 1496175265, "danmaku": 6, "desc": "YouTube原视频: https://www.youtube.com/watch?v=BKSOKksjgi4&t=0s来源:mogoo [もぐー]", "duration": 46, "face": "http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 105, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10959530", "play": 1953, "reply": 9, "share": 7, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【一分钟快手料理】创新料理!饺子皮生煎章鱼烧!", "tname": "美食圈", "uri": "bilibili://video/10959530" } ], "recent_count": 5, "reply": 54, "share": 12, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】制作咖啡史莱姆水球然后捏爆它&彩虹史莱姆泡泡", "tname": "手工", "uri": "bilibili://video/10959883" }, { "coin": 7, "cover": "http://i2.hdslb.com/bfs/archive/372322827536de22ce303a4d3d2810d72be71eeb.jpg", "ctime": 1496132472, "danmaku": 225, "desc": "YouTube原视频:https://www.youtube.com/watch?v=2FQJEr6Fbms来源:TV Cooking", "duration": 847, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 58, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10941084", "play": 4867, "reply": 32, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "世界各地的街头小吃-三明治的制作", "tname": "美食圈", "uri": "bilibili://video/10941084" }, { "coin": 4, "cover": "http://i1.hdslb.com/bfs/archive/97e483a4fe1cf936fac383263ed8f89608c46b90.jpg", "ctime": 1496123908, "danmaku": 29, "desc": "YouTube原视频:https://www.youtube.com/watch?v=wX8GSQs2KDM&t=353s来源:MosoGourmet 妄想グルメ", "duration": 424, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 40, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10936809", "play": 839, "recent": [ { "coin": 2, "cover": "http://i0.hdslb.com/bfs/archive/aa5d0362b2e1b32b40c4697185c5b8d88778903b.jpg", "ctime": 1496123794, "danmaku": 35, "desc": "YouTube原视频: https://www.youtube.com/watch?v=F_UCT4WZeXU来源:MosoGourmet 妄想グルメ", "duration": 539, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 80, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10937067", "play": 873, "reply": 19, "share": 4, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【魔法料理厨房】妄想太太教你制作熊熊宝宝豆皮帽子饭团", "tname": "美食圈", "uri": "bilibili://video/10937067" } ], "recent_count": 1, "reply": 15, "share": 4, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【魔法料理厨房】妄想太太教你制作可爱小男孩小女孩饭团", "tname": "美食圈", "uri": "bilibili://video/10936809" }, { "count": 13, "cover": "http://i2.hdslb.com/bfs/archive/fa3603556f8f2a7d4edbbc6b309592919c26aeff.jpg", "ctime": 1496106002, "danmaku": 1962, "goto": "up_bangumi", "index": "21", "index_title": "箱根学园、行动", "param": "5794", "play": 81825, "title": "飙速宅男 新世代", "type": 1, "updates": 100449, "uri": "bilibili://bangumi/season/5794" }, { "coin": 20, "cover": "http://i2.hdslb.com/bfs/archive/7d5b77dbc34152954298d1979e1daa0777825c87.jpg", "ctime": 1496086751, "danmaku": 1968, "desc": "YouTube原视频:https://www.youtube.com/watch?v=rl3UB6O26zI来源:pompomtoys", "duration": 914, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 218, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10930526", "play": 25989, "recent": [ { "coin": 1, "cover": "http://i2.hdslb.com/bfs/archive/cabd3e8e1798515d6035d031ed4bb8cf858f941c.jpg", "ctime": 1496086609, "danmaku": 83, "desc": "YouTube转载自YouTube原po:cooking tree原标题:체리쥬빌레 맛!", "duration": 309, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 109, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10930401", "play": 1524, "reply": 6, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【耳骚料理ASMR】耳机党福利!可爱动人的樱桃蛋糕~", "tname": "美食圈", "uri": "bilibili://video/10930401" }, { "cover": "http://i0.hdslb.com/bfs/archive/437a788b84738c7a6522ebc5f2bb852718ff3ba2.jpg", "ctime": 1496085542, "danmaku": 4, "desc": "YouTube原视频: https://www.youtube.com/watch?v=_VKJdTS9sSA&t=0s来源:tastemade", "duration": 51, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 94, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10930286", "play": 1565, "reply": 3, "share": 3, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】【Tastemade】牡蛎海鲜烩意大利面", "tname": "美食圈", "uri": "bilibili://video/10930286" }, { "coin": 2, "cover": "http://i0.hdslb.com/bfs/archive/2a2e08c722e37de828652ee6c09cfebcf881c7ad.jpg", "ctime": 1496085471, "danmaku": 28, "desc": "YouTube原视频:https://www.youtube.com/watch?v=1AMOUlHqVlI&t=1s来源:밴쯔의 ASMR", "duration": 824, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 27, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10930003", "play": 2702, "reply": 16, "share": 1, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【饿哭也要看他吃】奔驰小哥吃洋葱酱炒肉片~咀嚼音耳机党福利!", "tname": "美食圈", "uri": "bilibili://video/10930003" }, { "coin": 5, "cover": "http://i1.hdslb.com/bfs/archive/e985316f85d2e800989f3919b3176714d3e3f8c0.jpg", "ctime": 1496083615, "danmaku": 92, "desc": "YouTube原视频:https://www.youtube.com/watch?v=TfjyWKyxKvw&t=139s来源:decocookie", "duration": 289, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 45, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10929746", "play": 4776, "reply": 27, "share": 2, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "超好玩的卷冰淇淋器!拿铲子一溜卷过去真的完美到令人满意!", "tname": "美食圈", "uri": "bilibili://video/10929746" }, { "coin": 5, "cover": "http://i0.hdslb.com/bfs/archive/9111c02d9f872288b65c2fd0a627bac583995816.jpg", "ctime": 1496083433, "danmaku": 47, "desc": "YouTube原视频:https://www.youtube.com/watch?v=aeWo7YtCcL4", "duration": 923, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 213, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10929626", "play": 2098, "reply": 15, "share": 3, "tag": { "count": { "atten": 76189 }, "tag_id": 1283883, "tag_name": "趣味科普人文" }, "tid": 124, "title": "14个令人惊叹的手机和数据线的妙用!!", "tname": "趣味科普人文", "uri": "bilibili://video/10929626" } ], "recent_count": 5, "reply": 110, "share": 23, "tag": { "count": { "atten": 19289 }, "tag_id": 11265, "tag_name": "手工" }, "tid": 161, "title": "【狂魔玩玩具】充满亮片的史莱姆水球胖胖", "tname": "手工", "uri": "bilibili://video/10930526" }, { "count": 12, "cover": "http://i1.hdslb.com/bfs/archive/3667a19810a88a66cd540944a9a6ca5bf4a15015.jpg", "ctime": 1496079000, "danmaku": 18448, "goto": "up_bangumi", "index": "9", "index_title": "苍,感冒了/我也一起", "param": "5994", "play": 99194, "title": "机甲少女 FRAME ARMS GIRL", "type": 1, "updates": 103195, "uri": "bilibili://bangumi/season/5994" }, { "coin": 17, "cover": "http://i1.hdslb.com/bfs/archive/ae9a0a74577167ca83a4290c3f7af3081f49107e.jpg", "ctime": 1496054303, "danmaku": 168, "desc": "YouTube原视频:https://www.youtube.com/watch?v=bsLHd6mHpDU&t=366s来源:YuuumaTV", "duration": 569, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 428, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10916985", "play": 4555, "recent": [ { "coin": 3, "cover": "http://i1.hdslb.com/bfs/archive/a8d1aa9170f7be844c435c76258d3614e878aaa9.jpg", "ctime": 1496051570, "danmaku": 46, "desc": "YouTube原视频:https://www.youtube.com/watch?v=K4XK_vR6v5A&t=0s来源:ARIKITCHEN", "duration": 176, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 115, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10916168", "play": 2674, "reply": 17, "share": 6, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【三分钟快手料理】超下饭的洋葱炒鸡蛋午餐肉盖饭", "tname": "美食圈", "uri": "bilibili://video/10916168" }, { "coin": 4, "cover": "http://i0.hdslb.com/bfs/archive/55cc68911753a3b7d5ed1d9396ead410cb08c0d7.jpg", "ctime": 1496051100, "danmaku": 73, "desc": "YouTube原视频:https://www.youtube.com/watch?v=Pc0lULZCarA来源:HANSE", "duration": 411, "face": "http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg", "favorite": 117, "goto": "av", "is_atten": 1, "mid": 12617707, "name": "炒鸡饿吃苹果还是饿", "param": "10916008", "play": 1341, "reply": 15, "share": 1, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 174, "title": "【耳骚料理ASMR】耳机党福利!咸味焦糖马卡龙", "tname": "其他", "uri": "bilibili://video/10916008" } ], "recent_count": 2, "reply": 37, "share": 27, "tag": { "count": { "atten": 41703 }, "tag_id": 1207642, "tag_name": "美食圈" }, "tid": 76, "title": "【炒鸡饿搬运】日本小姐姐教你2种做蛋包饭的方式!片尾秀恩爱甜死人~", "tname": "美食圈", "uri": "bilibili://video/10916985" } ], "live": { "conut": 1, "count": 1, "item": [ { "cover": "http://i2.hdslb.com/bfs/face/947914911aa5e224507ce278281fcd1588d4f78b.jpg", "param": "3627798", "uri": "bilibili://live/3627798" } ] } }, "message": "", "ttl": 25 } ================================================ FILE: app/src/main/assets/game_center.json ================================================ {"code": 0, "data": { "book_gift": [ { "book_status": 0, "id": 1546, "image": "http://i0.hdslb.com/bfs/game/9e985c4405efe7ae920aabd9b8d418a499566864.jpg", "link": "http://blhx.biligame.com/h5/", "name": "碧蓝航线" }, { "book_status": 0, "id": 1504, "image": "http://i0.hdslb.com/bfs/game/89971792dc7e089a783fb888db4d6030a564e98f.jpg", "link": "http://mjj.biligame.com/yuyue/h5/", "name": "梦间集" }, { "book_status": 0, "id": 1700, "image": "http://i0.hdslb.com/bfs/game/8a166ba50006cbd3ce812929d90eb17477f42cad.jpg", "link": "http://acg.tv/u1jy", "name": "魔法禁书目录" }, { "book_status": 0, "id": 10086, "image": "http://i0.hdslb.com/bfs/game/27d33b3c91c6c3c4a3ab97fed38327fb7faae6f0.jpg", "link": "http://lxhzj.biligame.com/yuyue/h5/", "name": "罗小黑妖灵簿" }, { "book_status": 0, "id": 8897, "image": "http://i0.hdslb.com/bfs/game/74483f0edf606c2b4039bb5318ccaf2f23be1755.jpg", "link": "http://yxwj.biligame.com/h5/", "name": "一血万杰" }, { "book_status": 0, "id": 5000, "image": "http://i0.hdslb.com/bfs/game/4cc73a138adb5cfa1681f77d4600fbe0cd1f9d0f.octet-stream", "link": "http://girl.biligame.com/yuyue/h5/", "name": "妃十三学园" }, { "book_status": 0, "id": 9821, "image": "http://i0.hdslb.com/bfs/game/6594d31cbb10d8e0aa9f03ed63e18605da0b5ac8.jpg", "link": "http://ma3.biligame.com/yuyue/h5/", "name": "叛逆性百万亚瑟王" }, { "book_status": 0, "id": 1254, "image": "http://i0.hdslb.com/bfs/game/ce172f0021a38801119a03e2bed05d4db97341cd.jpg", "link": "http://zzgc.biligame.com/yuyue/h5/", "name": "战争工厂" }, { "book_status": 0, "id": 1486, "image": "http://i0.hdslb.com/bfs/game/a9b47c32367ac376279017334a5e153a5f2587cd.jpg", "link": "http://moe.biligame.com/yuyue/h5/", "name": "萌王EX" }, { "book_status": 0, "id": 1233, "image": "http://i0.hdslb.com/bfs/game/1d30d0516f4365439fcb009b52c9b54e3ace65ed.jpg", "link": "https://yjdyc.biligame.com/h5/", "name": "妖精的衣橱" }, { "book_status": 0, "id": 1445, "image": "http://i0.hdslb.com/bfs/game/371733ae28d3f8898832fe1472fe379b1923648d.jpg", "link": "http://sdmht.biligame.com/yuyueH5.html", "name": "神代梦华谭" } ], "cache_time": 30, "game_list": [ { "android_pkg_name": "com.bilibili.fatego", "android_pkg_size": 300515257, "android_pkg_ver": 49, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/fatego/fatego_v1.15.0_bili_app_183545.apk", "download_link2": "http://pkgdl.biligame.net/8ee23f/d1799f.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/0a114c837d9f8fae8f2489a4bf91bf912c61edae.png", "id": 61, "new": 0, "summary": "全平台公测开启!", "title": "命运-冠位指定(Fate/GO)" }, { "android_pkg_name": "com.netease.onmyoji.bili", "android_pkg_size": 961880258, "android_pkg_ver": 20, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/yys/yys_v1.0.20_bili_app_166723.apk", "download_link2": "http://pkgdl.biligame.net/yys/yys_v1.0.20_bili_app_166723.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/36ee7db87a0d27aa5bb4672fffc22fb5ff8ec68c.png", "id": 55, "new": 0, "summary": "唯美如樱,百鬼物语", "title": "阴阳师" }, { "android_pkg_name": "com.miHoYo.bh3.bilibili", "android_pkg_size": 974686164, "android_pkg_ver": 50, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/bh3/bh3_v1.5.0_bili_703764.apk", "download_link2": "http://pkgdl.biligame.net/bh3/bh3_v1.5.0_bili_703764.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/00ca761705a75f51072931503092e5d0ccd42623.png", "id": 67, "new": 0, "summary": "点燃ACG动作之魂!", "title": "崩坏3" }, { "android_pkg_name": "com.shangruan.huanlijing.bili", "android_pkg_size": 404192009, "android_pkg_ver": 2, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/xjqxzhlj/xjqxzhlj_v1.2_bili_741923.apk", "download_link2": "http://pkgdl.biligame.net/xjqxzhlj/xjqxzhlj_v1.2_bili_741923.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/914f8c00352afe5a2d99a62863634baf1db3d5c7.jpg", "id": 75, "new": 1, "summary": "入境成妖,破界重生!", "title": "仙剑奇侠传幻璃镜" }, { "android_pkg_name": "com.digitalsky.girlsfrontline.cn.bili", "android_pkg_size": 156409992, "android_pkg_ver": 125, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/snqx/snqx_v1.122_bili_250437.apk", "download_link2": "http://pkgdl.biligame.net/snqx/snqx_v1.122_bili_250437.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/5fe1986506abe7a519a47fa5e505b097b3e7178d.png", "id": 49, "new": 0, "summary": "战地誓约,守护羁绊", "title": "少女前线" }, { "android_pkg_name": "com.youzu.djlw.bili", "android_pkg_size": 234043222, "android_pkg_ver": 13, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/djlw/djlw_v1.0.43_bili_196537.apk", "download_link2": "http://pkgdl.biligame.net/djlw/djlw_v1.0.43_bili_196537.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/2950e1d94aa49a740f0d69a6ca64d60f97b68564.png", "id": 76, "new": 1, "summary": "刀剑男士,即刻出阵!", "title": "刀剑乱舞" }, { "android_pkg_name": "com.miHoYo.HSoDv2BiliBiliRelease", "android_pkg_size": 276075913, "android_pkg_ver": 1, "android_sign": "8B4FADF1EDA8B3D382873DECEBDAECC2", "download_link": "http://pkg.biligame.com/bhxy/bhxy_v4.1.7_bili_754921.apk", "download_link2": "http://pkgdl.biligame.net/bhxy/bhxy_v4.1.7_bili_754921.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/622bc1d70006d595c11f1f30802fcd578096cb76.png", "id": 1, "new": 0, "summary": "崩坏学园2-银狼之逐", "title": "崩坏学园2" }, { "android_pkg_name": "com.gcrest.yume100prince.android.bili", "android_pkg_size": 172685183, "android_pkg_ver": 133, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/100p/bili/100p_v1.16.0_bili_app_321456.apk", "download_link2": "http://pkgdl.biligame.net/100p/bili/100p_v1.16.0_bili_app_321456.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/f9ceae3c2f1655170391fe975fc1988d1a222bff.png", "id": 4, "new": 0, "summary": "谁才是能够拥你入怀的王子?", "title": "梦王国与沉睡的100王子" }, { "android_pkg_name": "com.baitian.pjm.zwfz.bili", "android_pkg_size": 238971576, "android_pkg_ver": 7, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/zwfz/zwfz_v1.0.6_bili_582014.apk", "download_link2": "http://pkgdl.biligame.net/zwfz/zwfz_v1.0.6_bili_582014.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/2018fb15ec09429459528cf8242105ffdae928a9.png", "id": 69, "new": 1, "summary": "一部可以玩的漫画!", "title": "造物法则" }, { "android_pkg_name": "com.tencent.tmgp.starscn", "android_pkg_size": 276450470, "android_pkg_ver": 563725, "android_sign": "EFBE39FB97E1A843AD33BEFFD333502B", "download_link": "https://pkg.biligame.com/oxmhj/oxmhj_v2.1.1_bili_846732.apk", "download_link2": "http://pkgdl.biligame.net/oxmhj/oxmhj_v2.1.1_bili_846732.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/1775ec5694d85d0e2e40d4c8b47fd4d1fccdc0b0.png", "id": 41, "new": 0, "summary": "响彻世界吧!青春×偶像×高校生!", "title": "偶像梦幻祭" }, { "android_pkg_name": "com.opd2c.athena.bili", "android_pkg_size": 636258143, "android_pkg_ver": 42, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/xmds/xmds_v4.0.0_bili_app_351146.apk", "download_link2": "ttp://pkgdl.biligame.net/xmds/xmds_v4.0.0_bili_app_351146.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/2ab2c01bc1fc7502bfed472d7da6b5cfd9fafbf4.png", "id": 23, "new": 0, "summary": "拯救都市,寻找真相", "title": "消灭都市" }, { "android_pkg_name": "com.bilibili.ichu", "android_pkg_size": 274833590, "android_pkg_ver": 10, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/ichu/ichu_v1.2.0.7_bili_app.apk", "download_link2": "http://pkgdl.biligame.net/ichu/ichu_v1.2.0.7_bili_app.apk", "hot": 1, "icon": "http://i0.hdslb.com/u_user/7baceb341073fe823faad36d2e1c805e.png", "id": 34, "new": 0, "summary": "把我变成真正的偶像吧!", "title": "ICHU偶像进行曲" }, { "android_pkg_name": "com.xsj.girlcafegun.bili", "android_pkg_size": 571557005, "android_pkg_ver": 101200003, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/snkfq/snkfq_v1.12.3_bili_586472.apk", "download_link2": "http://pkgdl.biligame.net/snkfq/snkfq_v1.12.3_bili_586472.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/330cd44350eff6e080a3859517485cb89e372429.png", "id": 56, "new": 1, "summary": "咖啡馆x少女x枪战", "title": "少女咖啡枪" }, { "android_pkg_name": "com.qzgame.eva.bili", "android_pkg_size": 525278216, "android_pkg_ver": 28212, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/eva/eva_v2.1.8_bili_385631.apk", "download_link2": "http://pkgdl.biligame.net/eva/eva_v2.1.8_bili_385631.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/20a7cb3e539906cb6d0e328dd24a0be3dd39d69b.png", "id": 73, "new": 1, "summary": "使徒来袭 指尖激战", "title": "EVA:破晓" }, { "android_pkg_name": "com.netease.gmdl.bili", "android_pkg_size": 436441747, "android_pkg_ver": 333423, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/gmdl/gmdl_v1.165917.167505_bili_app_268533.apk", "download_link2": "http://pkgdl.biligame.net/gmdl/gmdl_v1.165917.167505_bili_app_268533.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/0ef9e591ce4867f85c3fd05365faa745d21a75c4.png", "id": 78, "new": 0, "summary": "再一次 并肩作战", "title": "光明大陆" }, { "android_pkg_name": "com.zhuoyan.mfsn.bili", "android_pkg_size": 539692557, "android_pkg_ver": 237, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "http://pkgdl.biligame.net/mfsnxy/mfsnxy_v1.0.1.237_bili_app_636852.apk", "download_link2": "https://pkg.biligame.com/mfsnxy/mfsnxy_v1.0.1.237_bili_app_636852.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/1536b32e82ea4fb44a8037f4604f2e80269cbb67.png", "id": 44, "new": 1, "summary": "全平台公测正式开启!", "title": "魔法少女小圆" }, { "android_pkg_name": "com.zion.aquatrax", "android_pkg_size": 228110068, "android_pkg_ver": 4, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/zy/zy_v20.0.1_bili_568920.apk", "download_link2": "http://pkgdl.biligame.net/zy/zy_v20.0.1_bili_568920.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/32abcd8ae83f337623d13728f063e81eed5a07df.png", "id": 22, "new": 1, "summary": "呐,一起来打歌吧!", "title": "Zion载音" }, { "android_pkg_name": "com.sywl.hylr.bili", "android_pkg_size": 214895716, "android_pkg_ver": 1, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/hylr/hylr_v1.4.0_bili_app_363226.apk", "download_link2": "http://pkgdl.biligame.net/hylr/hylr_v1.4.0_bili_app_363226.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/5deda073214a544e4571c097fd98de92e00aa8b3.png", "id": 47, "new": 1, "summary": "全平台公测!妹系战争爆发", "title": "幻游猎人" }, { "android_pkg_name": "com.denachina.g10000002.bili", "android_pkg_size": 50187939, "android_pkg_ver": 25, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/hywz/hywz_v2.0.0_bili_892350.apk", "download_link2": "http://pkgdl.biligame.net/hywz/hywz_v2.0.0_bili_892350.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/277759569f1593fd29b836a19b4f9f76ba33ab27.png", "id": 68, "new": 1, "summary": "重燃纹章之火!", "title": "幻影纹章" }, { "android_pkg_name": "com.zy.yzr2.bz", "android_pkg_size": 400465450, "android_pkg_ver": 77, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/yzr2/yzr2_v1.0.20_bili_842512.apk", "download_link2": "http://pkgdl.biligame.net/yzr2/yzr2_v1.0.20_bili_842512.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/497c062d9c39facf02e175569207af403f8fdc04.png", "id": 70, "new": 1, "summary": "东方武侠竞技扛鼎之作", "title": "影之刃2" }, { "android_pkg_name": "com.StudioGM.Nico.bili", "android_pkg_size": 434717113, "android_pkg_ver": 59, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/nnlzysj/nnlzysj_v0.7.3_bili_734807.apk", "download_link2": "http://pkgdl.biligame.net/nnlzysj/nnlzysj_v0.7.3_bili_734807.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/30651b513ab0f5533c4dd79fc6e7aa4322b76420.png", "id": 74, "new": 1, "summary": "异世界 x 少女 x 羁绊", "title": "诺诺来自异世界" }, { "android_pkg_name": "com.tank.yx.bili", "android_pkg_size": 266983654, "android_pkg_ver": 645, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/zjlm/zjlm_v1.328.2_bili_app_834742.apk", "download_link2": "http://pkgdl.biligame.net/zjlm/zjlm_v1.328.2_bili_app_834742.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/96d87c7dfdc6a24e9adf7866dc14af12e2a0a5bd.png", "id": 60, "new": 1, "summary": "萌娘X坦克 大作战", "title": "装甲联盟" }, { "android_pkg_name": "com.xd.sglms.bilibili", "android_pkg_size": 506188325, "android_pkg_ver": 9044, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/sglms/sglms_v1.0.9044_bili_app_864243.apk", "download_link2": "http://pkgdl.biligame.net/sglms/sglms_v1.0.9044_bili_app_864243.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/d95f6c858126086762976d60eec2c2e395f69e04.jpg", "id": 50, "new": 1, "summary": "意料之外却又情理之中的三国", "title": "三国罗曼史" }, { "android_pkg_name": "com.xianyugame.natuwy.bili", "android_pkg_size": 141172906, "android_pkg_ver": 7, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/ntzdgm/ntzdgm_v1.0.7_bili_389653.apk", "download_link2": "http://pkgdl.biligame.net/ntzdgm/ntzdgm_v1.0.7_bili_389653.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/9c9848b308e41b902b16dac77d290b4702c2e031.png", "id": 66, "new": 0, "summary": "每只兔子都有一个大国梦", "title": "那兔之大国梦" }, { "android_pkg_name": "com.longtugame.lxjjx.bili", "android_pkg_size": 526337987, "android_pkg_ver": 776, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/lxjjx/lxjjx_v1.8.0_bili_app_118024.apk", "download_link2": "http://pkgdl.biligame.net/lxjjx/lxjjx_v1.8.0_bili_app_118024.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/5e61cba9d062f2d333b883c044660bfe85f088bd.png", "id": 58, "new": 0, "summary": "幻想之境,触手可及", "title": "螺旋境界线" }, { "android_pkg_name": "com.ledo.areal.bili", "android_pkg_size": 214714919, "android_pkg_ver": 10400, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/rgdsj/rgdsj_v1.4.0_bili_245991.apk", "download_link2": "http://pkgdl.biligame.net/rgdsj/rgdsj_v1.4.0_bili_245991.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/2db63de24a6eea18bfad2938ce3d216b0c6f2641.png", "id": 59, "new": 0, "summary": "动漫回合,协力冒险", "title": "如果的世界" }, { "android_pkg_name": "com.wali.jianxiashijie3D.bili", "android_pkg_size": 757442067, "android_pkg_ver": 3881, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/jxsj/jxsj_v1.2.3881_bili_app.apk", "download_link2": "http://pkgdl.biligame.net/jxsj/jxsj_v1.2.3881_bili_app.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/4b161990beecaa61e1effb1f2865d6c04bd49118.png", "id": 62, "new": 1, "summary": "一生不容错过的浪漫武侠", "title": "剑侠世界" }, { "android_pkg_name": "com.chyo.fleet.bili", "android_pkg_size": 128312007, "android_pkg_ver": 25, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/bfzj/bfzj_v1.10.0_bili_app_754264.apk", "download_link2": "http://pkgdl.biligame.net/bfzj/bfzj_v1.10.0_bili_app_754264.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/63fef8556c3465dea12e3c0849bd12761cdf664b.png", "id": 64, "new": 0, "summary": "次世代3D战争策略手游", "title": "暴风战舰" }, { "android_pkg_name": "com.yunchang.djsy.bili", "android_pkg_size": 451454434, "android_pkg_ver": 2100, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/djsy/djsy_v2.0.0_bili_app_562245.apk", "download_link2": "http://pkgdl.biligame.net/djsy/djsy_v2.0.0_bili_app_562245.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/764f761e9fd67a4e9d07155e7a621e39c2987cc0.png", "id": 42, "new": 0, "summary": "虽然是游戏,但可不是闹着玩的", "title": "刀剑神域黑衣剑士" }, { "android_pkg_name": "com.netease.ma56.bili", "android_pkg_size": 284813313, "android_pkg_ver": 4, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/ydsnywl/ydsnywl_v4.0_bili_488294.apk", "download_link2": "http://pkgdl.biligame.net/ydsnywl/ydsnywl_v4.0_bili_488294.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/2298be435121301d750025fbd1d6f4856ba06ec8.png", "id": 53, "new": 1, "summary": "花泽香菜陪你一同黑化!", "title": "妖刀少女异闻录" }, { "android_pkg_name": "com.netease.dhhzl.bili", "android_pkg_size": 496783735, "android_pkg_ver": 17, "android_sign": "4502A02A00395DEC05A4134AD593224D", "download_link": "https://pkg.biligame.com/dhhzl/dhhzl_v1.1.7_bili_app_312258.apk", "download_link2": "http://pkgdl.biligame.net/dhhzl/dhhzl_v1.1.7_bili_app_312258.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/034ee658a62595cfce63dc89c59e9db4434b743e.png", "id": 63, "new": 1, "summary": "全3D真实航海冒险MMO手游", "title": "大航海之路" }, { "android_pkg_name": "com.netease.ma.bili", "android_pkg_size": 76142153, "android_pkg_ver": 51000, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/ma/bili/ma2_v5.1.0_bili_app_843974.apk", "download_link2": "http://pkgdl.biligame.net/ma/bili/ma2_v5.1.0_bili_app_843974.apk", "hot": 1, "icon": "http://i0.hdslb.com/bfs/game/138e5dfdb5059d94e6e6b23b0bcb8ca43f6cf111.png", "id": 3, "new": 0, "summary": "新老玩家登录 领特别礼包哟", "title": "乖离性百万亚瑟王" }, { "android_pkg_name": "com.netease.av.bili", "android_pkg_size": 498438674, "android_pkg_ver": 16, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/hpjn/hpjn_v1.6.5_bili_app_946756.apk", "download_link2": "http://pkgdl.biligame.net/hpjn/hpjn_v1.6.5_bili_app_946756.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/14db819c78ab79c3f18e7fa5e9acf0c191594d02.png", "id": 57, "new": 0, "summary": "二次元战机娘化游戏", "title": "皇牌机娘" }, { "android_pkg_name": "com.kurogame.oppai.bili", "android_pkg_size": 548252109, "android_pkg_ver": 45, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/zcsmw/zcsmw_v2.1.0_bili_app_478446.apk", "download_link2": "http://pkgdl.biligame.net/zcsmw/zcsmw_v2.1.0_bili_app_478446.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/633e5dc3e361ac868aa14f38978bd227869677b3.png", "id": 45, "new": 0, "summary": "萌即正义!", "title": "战场双马尾" }, { "android_pkg_name": "com.nhnst.SKCQCN.bili", "android_pkg_size": 295042802, "android_pkg_ver": 93, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/klsdzj/klsdzj_v3.5.13_bili_app_452114.apk", "download_link2": "http://pkgdl.biligame.net/klsdzj/klsdzj_v3.5.13_bili_app_452114.apk", "hot": 0, "icon": "http://i2.hdslb.com/u_user/503113dc29417f5c53abfeb9b520dbeb.png", "id": 26, "new": 0, "summary": "日式萌系像素风RPG", "title": "克鲁赛德战记" }, { "android_pkg_name": "com.xd.ttdbl.bili", "android_pkg_size": 153064355, "android_pkg_ver": 10123, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/ttdbl/ttdbl_v2.4.0_bili_app_257548.apk", "download_link2": "http://pkgdl.biligame.net/ttdbl/ttdbl_v2.4.0_bili_app_257548.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/048a359bdb40cfb521130396a6b4b4d3912a4e76.png", "id": 43, "new": 0, "summary": "吃饭、睡觉、打波利!", "title": "天天打波利" }, { "android_pkg_name": "com.zxlf.zwhx.bili", "android_pkg_size": 381836314, "android_pkg_ver": 5, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/zwhx/zwhxq_v1.12.001_bili_291592.apk", "download_link2": "http://pkgdl.biligame.net/zwhx/zwhxq_v1.12.001_bili_291592.apk", "hot": 1, "icon": "http://i2.hdslb.com/u_user/5ea559c4f8d18294617cec080e1b43b9.png", "id": 31, "new": 0, "summary": "出发,大小姐探宝团!", "title": "战舞幻想曲" }, { "android_pkg_name": "com.koramgame.els.kl.bili", "android_pkg_size": 436721681, "android_pkg_ver": 415, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/aezj/aezj_v0.20712.20_bili_app_353064.apk", "download_link2": "http://pkgdl.biligame.net/aezj/aezj_v0.20712.20_bili_app_353064.apk", "hot": 0, "icon": "http://i2.hdslb.com/u_user/7d4187201faf0669a45c77ccfb665b38.png", "id": 28, "new": 0, "summary": "原汁原味二次元萌格斗", "title": "艾尔战记" }, { "android_pkg_name": "cn.mobage.g12000145.bili", "android_pkg_size": 304714100, "android_pkg_ver": 420, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/yszh/yszh_v4.2.0_bili_app_510925.apk", "download_link2": "http://pkgdl.biligame.net/yszh/yszh_v4.2.0_bili_app_510925.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/24e41b1d981a461fd6779d72239185b9f702b12a.png", "id": 40, "new": 0, "summary": "银魂万事屋今日开业!", "title": "银时之魂" }, { "android_pkg_name": "com.smiletech.shzj.bili", "android_pkg_size": 528955815, "android_pkg_ver": 8, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/shzj/shzj_v4.17.1_bili_app_373816.apk", "download_link2": "http://pkgdl.biligame.net/shzj/shzj_v4.17.1_bili_app_373816.apk", "hot": 0, "icon": "http://i0.hdslb.com/u_user/1126584600b7332152f5cd2bc56960e6.png", "id": 27, "new": 0, "summary": "吾从未见过如此高颜值之塔防", "title": "山海战记" }, { "android_pkg_name": "com.act91.bbrr.bili", "android_pkg_size": 334878345, "android_pkg_ver": 26332, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/cyzr/cyzr_v1.14.0_bili_app.apk", "download_link2": "http://pkgdl.biligame.net/cyzr/cyzr_v1.14.0_bili_app.apk", "hot": 0, "icon": "http://i2.hdslb.com/u_user/751e3223d97bad57bbb8b14a747d0724.png", "id": 20, "new": 0, "summary": "无冷却手势连招格斗", "title": "苍翼之刃" }, { "android_pkg_name": "com.happyelements.miraclecn.bilibili", "android_pkg_size": 171388291, "android_pkg_ver": 1322, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/mlkwy/mlkwy_v3.5.0_bili_app_1487729027.apk", "download_link2": "http://pkgdl.biligame.net/mlkwy/mlkwy_v3.5.0_bili_app_1487729027.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/80c7c8202a52a484d18b2ac1cc7523fffbf4a70a.png", "id": 8, "new": 0, "summary": "伦家是最萌的游戏,快来玩", "title": "梅露可物语" }, { "android_pkg_name": "com.good.world2fbcn", "android_pkg_size": 63167960, "android_pkg_ver": 20, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/sj2/bili/sj2_v2.6_bili_app.apk", "download_link2": "http://pkgdl.biligame.net/sj2/bili/sj2_v2.6_bili_app.apk", "hot": 0, "icon": "http://i0.hdslb.com/u_user/9008d9b26e263285824979e21c0c18bd.png", "id": 9, "new": 0, "summary": "新的风暴,已经出现", "title": "风暴帝国-世界2" }, { "android_pkg_name": "com.yzr.bili", "android_pkg_size": 215393621, "android_pkg_ver": 31, "android_sign": "5F6A75569A2D96109405E969C4F57AAA", "download_link": "https://pkg.biligame.com/yzr/yzr_v1.16.0_bili_app_144782.apk", "download_link2": "http://pkgdl.biligame.net/yzr/yzr_v1.16.0_bili_app_144782.apk", "hot": 0, "icon": "http://i0.hdslb.com/bfs/game/4c12a1516243b08cbdef2877459c48dffcb2fb52.png", "id": 10, "new": 0, "summary": "雨,何时能停?敌之血,流干之时", "title": "影之刃" } ], "glist_display_cnt": 10, "greetings": [ { "context": "机战萌娘,等你来战!" }, { "context": "来和阿宝学功夫吧~" }, { "context": "纳尼,我中了二向箔?" }, { "context": "不摸鱼的人参,和咸鱼有什么区别?" }, { "context": "谁是拥你入怀的王子?" }, { "context": "纣王姐姐求嫁!" }, { "context": "洛天依要带回家吗?" }, { "context": "和香菜还有组长一起来拯救都市吧~" }, { "context": "拔出石中剑,成为不列颠的王吧!" }, { "context": "一起来玩有节操的游戏" }, { "context": "我从未见过如此魔性之消除" }, { "context": "带你重回红白机时代" }, { "context": "一根手指就能玩转世界~" }, { "context": "公主当然还是我家的最可爱了" }, { "context": "和我一起进入水墨风东方幻想世界吧~" }, { "context": "愿意来读读这本血影世界的暗黑物语吗?" }, { "context": "新的风暴已经出现,你可做好准备?" }, { "context": "看不见我看不见我看不见我......" }, { "context": "诸君,我喜欢战争" }, { "context": "其实好多烦恼切掉哔—就都没有了" }, { "context": "壮士!请干了这杯安利!" } ], "last_play": [], "publicities": [], "uid": 117143614 }, "request-id": "b37ef810453711e7add752223300e22c", "timestamp": 1496149000000 } ================================================ FILE: app/src/main/assets/recommend.json ================================================ {"code":0,"data":[{"param":"0","goto":"banner","idx":1496197869,"banner_item":[{"id":47954,"title":"生活0531","image":"http://i0.hdslb.com/bfs/archive/0316d456b65201d29c07c3b582c3ac5c48e6cc0d.jpg","hash":"d2ea6b8394d9073665364da3a7dc8ccb","uri":"http://www.bilibili.com/blackboard/topic/activity-S1bVTw8--.html","request_id":"1496197858463","server_type":0,"resource_id":631,"index":1,"cm_mark":0},{"id":0,"title":"碧蓝","image":"https://i0.hdslb.com/bfs/archive/559e3d6b7030dca1bb9ef2f7350b60e6fc649655.jpg","hash":"aed9daa33a476e7a441c24abc4c7dac9","uri":"http://blhx.biligame.com/h5","request_id":"1496197858507q172a18a61a110q206","creative_id":17595,"src_id":703,"is_ad_loc":true,"ad_cb":"CLuJARCtMBiQNyAAKAAwADi/BUIfMTQ5NjE5Nzg1ODUwN3ExNzJhMThhNjFhMTEwcTIwNkjLid7ixStSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXABeACAAQCIAa8VkgEPMTI1LjEyMC4yMjUuMTc0","client_ip":"125.120.225.174","server_type":1,"resource_id":631,"index":2,"cm_mark":2},{"id":0,"title":"【深夜福利】这TM是要搞事啊!!!","image":"https://i0.hdslb.com/bfs/archive/e0b75b518221b0f59352b169a27cbbc7525b966b.jpg","hash":"aaa89e8e949ac95222e8d5bb591564f8","uri":"bilibili://video/10815497","request_id":"1496197858507q172a18a61a110q206","creative_id":17504,"src_id":704,"is_ad":true,"is_ad_loc":true,"ad_cb":"COCIARCIMBjqNiAAKAAwADjABUIfMTQ5NjE5Nzg1ODUwN3ExNzJhMThhNjFhMTEwcTIwNkjLid7ixStSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXABeACAAQCIAbgYkgEPMTI1LjEyMC4yMjUuMTc0","click_url":"http://t.cr-nielsen.com/hat?_t=r\u0026type=clk\u0026hat_id=MTM3JjI0MCY4MTAwNTI2NSYxMTI1OTE3JjMxODgwMjQ3JoTy\u0026_z=m\u0026rnd=42547380","client_ip":"125.120.225.174","server_type":1,"resource_id":631,"index":3,"cm_mark":1},{"id":48016,"title":"弹幕问卷","image":"http://i0.hdslb.com/bfs/archive/a2daba1a34d7a19449d5447600ac4005f99d8b27.jpg","hash":"011b676d7a00486edc29510c1f6b1136","uri":"http://www.bilibili.com/blackboard/activity-rynk7IHZ-.html","request_id":"1496197858463","server_type":0,"resource_id":631,"index":4,"cm_mark":0}]},{"title":"明唐——定国篇(上)相遇","cover":"http://i1.hdslb.com/bfs/archive/0ea061024e4aa81425d9cb84f00f8e76952020f1.jpg","uri":"bilibili://video/10930244","param":"10930244","goto":"av","desc":"因明唐CP玩起了剑三\n没上80级就手痒开始玩剑网三视频编辑器\n三天肝出来的视频 希望大家喜欢\n另外 重点是\n求各种段子 各种梗 各种剧情 以对白为主\n只要维持住炮哥的正点的形象就行了\n谢谢大家","play":380,"danmaku":17,"reply":23,"favorite":25,"coin":17,"share":1,"idx":1496197868,"tid":65,"tname":"网络游戏","tag":{"tag_id":1052085,"tag_name":"明唐大法好","count":{"atten":155}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:秋上君"},{"reason_id":2,"reason_name":"分区:网络游戏"},{"reason_id":3,"reason_name":"标签:明唐大法好"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1496085629,"duration":173,"mid":28650198,"name":"秋上君","face":"http://static.hdslb.com/images/member/noface.gif"},{"title":"【剑网三八周年(全门派)】天行九歌","cover":"http://i1.hdslb.com/bfs/archive/008ee6111a0861a7e3827e3c379865e813ac93b7.jpg","uri":"bilibili://video/10843644","param":"10843644","goto":"av","desc":"BGM:霍尊-《天行九歌》。最近太喜欢这首歌了,又懒癌发作。。所以做了做,又剪了剪以前的视频,希望大家不要嫌弃~~喜欢请投票哦!~捂脸逃走~~~~","play":8742,"danmaku":153,"reply":96,"favorite":466,"coin":111,"share":30,"idx":1496197867,"tid":121,"tname":"GMV","tag":{"tag_id":25483,"tag_name":"GMV","count":{"atten":135}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:顾小幺不吃药"},{"reason_id":2,"reason_name":"分区:GMV"},{"reason_id":3,"reason_name":"标签:GMV"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1495827724,"duration":234,"mid":35770531,"name":"顾小幺不吃药","face":"http://i2.hdslb.com/bfs/face/6f3fd55979fae712ffdfd93cd1adb37a679cc132.jpg"},{"title":"刺客信条燃向混剪","cover":"http://i1.hdslb.com/bfs/archive/7c0e26b22078fab89749194f2d8cfab6b009f6e6.png","uri":"bilibili://video/10935834","param":"10935834","goto":"av","desc":"BGM:In - Simple Plan","play":320,"danmaku":2,"reply":7,"favorite":18,"coin":10,"share":3,"idx":1496197866,"tid":121,"tname":"GMV","tag":{"tag_id":6716,"tag_name":"动作","count":{"atten":45489}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:中二の废宅"},{"reason_id":2,"reason_name":"分区:GMV"},{"reason_id":3,"reason_name":"标签:动作"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1496122029,"duration":220,"mid":16915049,"name":"中二の废宅","face":"http://i1.hdslb.com/bfs/face/ec8d29293a148fa3e59137e1b24822c3bc85fa32.jpg"},{"title":"【十点电影】交往劈腿、婚内出轨,何书桓这群人,才是真正的渣男","cover":"http://i0.hdslb.com/bfs/archive/80e784f373a129725e9ca287b63e1ef3b84f9dcf.jpg","uri":"bilibili://video/10939625","param":"10939625","goto":"av","desc":"前女友童年都看了些啥玩意儿(⊙﹏⊙)","play":20463,"danmaku":315,"reply":287,"favorite":236,"coin":203,"share":63,"idx":1496197865,"tid":128,"tname":"电视剧相关","tag":{"tag_id":1436580,"tag_name":"十点电影","count":{"atten":114}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:十点电影"},{"reason_id":2,"reason_name":"分区:电视剧相关"},{"reason_id":3,"reason_name":"标签:十点电影"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1496127763,"duration":339,"mid":17518116,"name":"十点电影","face":"http://i1.hdslb.com/bfs/face/0979d1a0a9fa0fa115dfa275df48dbe6028a92ba.jpg"},{"title":"【桌面美化】win10剑灵桌面美化show","cover":"http://i0.hdslb.com/bfs/archive/102a583155d24c104e0fd16774f60c18daa83f51.jpg","uri":"bilibili://video/10941861","param":"10941861","goto":"av","desc":"美化说明:\n1.桌面软件为:Rainmeter\n2.壁纸使用软件为:wallpaper engine,壁纸主题源自Steam创意工坊\n3.任务栏修改软件为:StartIsBack\n4.BGM为剑灵原声音乐:쾌검(快剑) 金致焕\n\nPS:Rainmeter这几款皮肤算是经典烂街了,wallpaper engine强大之处更不必多说,屏幕中间的是两个软件的组合装饰效果。本视频仅为个人兴趣,不喜勿喷,欢迎讨论交流。","play":4425,"danmaku":37,"reply":46,"favorite":172,"coin":12,"share":12,"idx":1496197864,"tid":122,"tname":"野生技术协会","tag":{"tag_id":634574,"tag_name":"经验分享","count":{"atten":41}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:晚明楼"},{"reason_id":2,"reason_name":"分区:野生技术协会"},{"reason_id":3,"reason_name":"标签:经验分享"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1496131314,"duration":127,"mid":3574152,"name":"晚明楼","face":"http://i0.hdslb.com/bfs/face/3980de96aed4b148af6dbfdd141e585fc159f483.jpg"},{"title":"【燃向-刺客信条cg混剪】为自由而战","cover":"http://i0.hdslb.com/bfs/archive/60d1a95fe90f5e2bdfc3bb5031fe834d9917604b.jpg","uri":"bilibili://video/10931370","param":"10931370","goto":"av","desc":"BGM:Audio machine - Shadowfall - 纯音乐版","play":439,"danmaku":3,"reply":9,"favorite":20,"coin":4,"share":1,"idx":1496197863,"tid":121,"tname":"GMV","tag":{"tag_id":12459,"tag_name":"燃曲","count":{"atten":626}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:逗比作死的兔纸"},{"reason_id":2,"reason_name":"分区:GMV"},{"reason_id":3,"reason_name":"标签:燃曲"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1496088385,"duration":150,"mid":6083998,"name":"逗比作死的兔纸","face":"http://i2.hdslb.com/bfs/face/5b2aff65d8fb866138f8ee81fbcf3b5a802c36d3.jpg"},{"title":"【Eva Green】伊娃·格林电影混剪——《易燃易爆炸 》","cover":"http://i1.hdslb.com/bfs/archive/1a8f0531be48080c6e15b4489c16708b25977521.jpg","uri":"bilibili://video/10853527","param":"10853527","goto":"av","desc":"伊娃·格林(Eva Green),法国演员,1980年7月5日出生于巴黎,烟不离手。","play":11513,"danmaku":83,"reply":46,"favorite":728,"coin":119,"share":68,"idx":1496197862,"tid":82,"tname":"电影相关","tag":{"tag_id":2525771,"tag_name":"Eva Green","count":{"atten":28}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:暴君吃葡萄"},{"reason_id":2,"reason_name":"分区:电影相关"},{"reason_id":3,"reason_name":"标签:Eva Green"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1495858559,"duration":636,"mid":24995335,"name":"暴君吃葡萄","face":"http://static.hdslb.com/images/member/noface.gif"},{"title":"【老范】射击版狼人杀,求关注,来开船吧","cover":"http://i0.hdslb.com/bfs/live/0fe43a8106809de5fdb04ea4c7aac66f1d6c8185.jpg","uri":"bilibili://live/4152345","param":"4152345","goto":"live","desc":"野生的主播开播啦!不是每天都见得到哦。真的不进来看看咩?(°∀°)ノ","idx":1496197861,"mid":105563254,"name":"老范I","face":"http://i1.hdslb.com/bfs/face/ca739b66fae55f7255f95111256a73c05447d954.jpg","online":2772,"area":"单机联机","area_id":1,"open":1496186842},{"title":"【DMC】鬼泣的GMV小合集(黑历史合集)","cover":"http://i2.hdslb.com/bfs/archive/91fb24b49d578c7da09401026e1ed0d5f4527b21.jpg","uri":"bilibili://video/10942766","param":"10942766","goto":"av","desc":"不是新作,很久以前做的GMV,因为某站药丸所以稍微搬到这里保存下来","play":1130,"danmaku":3,"reply":14,"favorite":29,"coin":14,"share":1,"idx":1496197860,"tid":121,"tname":"GMV","tag":{"tag_id":11118,"tag_name":"鬼泣3","count":{"atten":127}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:TsukiBito流流"},{"reason_id":2,"reason_name":"分区:GMV"},{"reason_id":3,"reason_name":"标签:鬼泣3"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1496134845,"duration":300,"mid":3250601,"name":"TsukiBito流流","face":"http://i1.hdslb.com/bfs/face/a4af7ecbc35f96341597fdcb5d003669e4aa7db5.jpg"},{"title":"QUEEN","cover":"http://i2.hdslb.com/bfs/archive/1c83bdc94f443050ef35e433ac9daa4c33b31e3b.jpg","uri":"bilibili://video/10834061","param":"10834061","goto":"av","desc":"BGM:Zack Hemsey-I Can Get It Back (Instrumental)","play":10091,"danmaku":137,"reply":210,"favorite":835,"coin":1528,"share":87,"idx":1496197859,"tid":82,"tname":"电影相关","tag":{"tag_id":305491,"tag_name":"欧美群像","count":{"atten":16364}},"dislike_reasons":[{"reason_id":4,"reason_name":"UP主:Man6on"},{"reason_id":2,"reason_name":"分区:电影相关"},{"reason_id":3,"reason_name":"标签:欧美群像"},{"reason_id":1,"reason_name":"不感兴趣"}],"ctime":1495779750,"duration":100,"mid":25678461,"name":"Man6on","face":"http://i2.hdslb.com/bfs/face/e7180c21db07c15181dd198df47e4009eb9a80bf.jpg"}],"message":"","ttl":1} ================================================ FILE: app/src/main/assets/recommend_chase.json ================================================ {"code": 0, "message": "success", "result": { "ad": [], "recommend_cn": { "foot": [ { "cover": "http://i0.hdslb.com/bfs/bangumi/cdd184ce6e51aefd7055103d54753fd63d47e061.jpg", "cursor": 1496246400706, "desc": "叶峰要玩自己的音乐,楚天歌想让麦云洁另眼相看,盖世爱要出风头,石小松要当一流鼓手,四个男孩组成了乐队,感受到青春与音乐的魅力。", "id": 5046, "is_new": 1, "link": "http://bangumi.bilibili.com/anime/2169", "onDt": "2017-06-01 00:00:00", "title": "六一快乐•童年的《我为歌狂》" } ], "recommend": [ { "cover": "http://i0.hdslb.com/bfs/bangumi/186560d36c229efd888ef959f796d58abd2fd685.jpg", "favourites": "18056", "is_auto": 0, "is_finish": 0, "is_started": 1, "last_time": 1496318400, "newest_ep_index": "41", "pub_time": 1469116800, "season_id": 6052, "season_status": 2, "title": "叫我僵小鱼 日常篇", "total_count": -1, "watching_count": 0 }, { "cover": "http://i0.hdslb.com/bfs/bangumi/6e87284e07edb2a7bb0fbe6bd2af0e4601a13f7b.jpg", "favourites": "12383", "is_auto": 0, "is_finish": 0, "is_started": 1, "last_time": 1496304000, "newest_ep_index": "2", "pub_time": 1495641600, "season_id": 6187, "season_status": 2, "title": "盗墓笔记之沙海 第二季", "total_count": -1, "watching_count": 0 }, { "cover": "http://i0.hdslb.com/bfs/bangumi/6bf4ed92c56f6d9cb51d8e88f8eb8c599476b47b.jpg", "favourites": "20689", "is_auto": 0, "is_finish": 0, "is_started": 1, "last_time": 1496282400, "newest_ep_index": "23", "pub_time": 1482940800, "season_id": 6022, "season_status": 2, "title": "菊叔5岁画", "total_count": -1, "watching_count": 0 } ] }, "recommend_jp": { "foot": [ { "cover": "http://i0.hdslb.com/bfs/bangumi/f57423fba6a308193cd4bf252c41b10ba9c91b62.jpg", "cursor": 1496102400307, "desc": "房东是个可爱的高中生!", "id": 4850, "link": "http://bangumi.bilibili.com/anime/3116", "onDt": "2017-05-30 08:00:00", "title": "【泡面档】房东妹子青春期!" } ], "recommend": [ { "cover": "http://i0.hdslb.com/bfs/bangumi/8aa87787edd29b84c4091e8e483ae48422b7bbd0.jpg", "favourites": "926481", "is_auto": 0, "is_finish": 0, "is_started": 1, "last_time": 1496365202, "newest_ep_index": "9", "pub_time": 1491494400, "season_id": 5996, "season_status": 2, "title": "恋爱暴君", "total_count": 12, "watching_count": 0 }, { "cover": "http://i0.hdslb.com/bfs/bangumi/6fccd08f6f747343c2d3bbcd54e4912a9fa51418.jpg", "favourites": "156031", "is_auto": 0, "is_finish": 0, "is_started": 1, "last_time": 1496341680, "newest_ep_index": "9", "pub_time": 1491494400, "season_id": 5991, "season_status": 2, "title": "青春歌舞伎", "total_count": 12, "watching_count": 0 }, { "cover": "http://i0.hdslb.com/bfs/bangumi/5ce66f68d54052e3a305524b9b06a76977e974fc.jpg", "favourites": "688042", "is_auto": 0, "is_finish": 0, "is_started": 1, "last_time": 1496335080, "newest_ep_index": "8", "pub_time": 1491408000, "season_id": 5989, "season_status": 2, "title": "月色真美", "total_count": 12, "watching_count": 0 } ] } } } ================================================ FILE: app/src/main/assets/region.json ================================================ { "code": 0, "data": [ { "tid": 65537, "reid": 0, "name": "直播", "logo": "", "goto": "", "param": "", "children": [ { "tid": 12, "reid": 13, "name": "手游直播", "logo": "http://i0.hdslb.com/bfs/live/9c7dad347d8bc25e56a53e9c6f65526ce8161065.jpg", "goto": "", "param": "" }, { "tid": 8, "reid": 13, "name": "萌宅推荐", "logo": "http://i0.hdslb.com/u_user/18ad593e4b2f90b233f817e028bee71d.png", "goto": "", "param": "" }, { "tid": 9, "reid": 13, "name": "绘画专区", "logo": "http://i0.hdslb.com/u_user/405774aed11d0538a3548109a598fd80.png", "goto": "", "param": "" }, { "tid": 3, "reid": 13, "name": "网络游戏", "logo": "", "goto": "", "param": "" }, { "tid": 1, "reid": 13, "name": "单机联机", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" }, { "tid": 4, "reid": 13, "name": "电子竞技", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" }, { "tid": 10, "reid": 13, "name": "唱见舞见", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" }, { "tid": 6, "reid": 13, "name": "生活娱乐", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" }, { "tid": 2, "reid": 13, "name": "御宅文化", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" }, { "tid": 7, "reid": 13, "name": "放映厅", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" }, { "tid": 99, "reid": 13, "name": "精彩轮播", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" } ] }, { "tid": 13, "reid": 0, "name": "番剧", "logo": "", "goto": "", "param": "", "children": [ { "tid": 33, "reid": 13, "name": "连载动画", "logo": "http://i0.hdslb.com/u_user/54f589cd0573f9ab5c735698ae156d19.png", "goto": "", "param": "" }, { "tid": 32, "reid": 13, "name": "完结动画", "logo": "http://i0.hdslb.com/u_user/18ad593e4b2f90b233f817e028bee71d.png", "goto": "", "param": "" }, { "tid": 153, "reid": 13, "name": "国产动画", "logo": "http://i0.hdslb.com/u_user/405774aed11d0538a3548109a598fd80.png", "goto": "", "param": "" }, { "tid": 51, "reid": 13, "name": "资讯", "logo": "", "goto": "", "param": "" }, { "tid": 152, "reid": 13, "name": "官方延伸", "logo": "http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png", "goto": "", "param": "" } ] }, { "tid": 1, "reid": 0, "name": "动画", "logo": "", "goto": "", "param": "", "children": [ { "tid": 24, "reid": 1, "name": "MAD·AMV", "logo": "", "goto": "", "param": "" }, { "tid": 25, "reid": 1, "name": "MMD·3D", "logo": "", "goto": "", "param": "" }, { "tid": 47, "reid": 1, "name": "短片·手书·配音", "logo": "", "goto": "", "param": "" }, { "tid": 27, "reid": 1, "name": "综合", "logo": "", "goto": "", "param": "" } ] }, { "tid": 3, "reid": 0, "name": "音乐", "logo": "", "goto": "", "param": "", "children": [ { "tid": 31, "reid": 3, "name": "翻唱", "logo": "", "goto": "", "param": "" }, { "tid": 30, "reid": 3, "name": "VOCALOID·UTAU", "logo": "", "goto": "", "param": "" }, { "tid": 59, "reid": 3, "name": "演奏", "logo": "", "goto": "", "param": "" }, { "tid": 54, "reid": 3, "name": "OP/ED/OST", "logo": "", "goto": "", "param": "" }, { "tid": 28, "reid": 3, "name": "原创音乐", "logo": "", "goto": "", "param": "" }, { "tid": 29, "reid": 3, "name": "三次元音乐", "logo": "", "goto": "", "param": "" }, { "tid": 130, "reid": 3, "name": "音乐选集", "logo": "", "goto": "", "param": "" } ] }, { "tid": 129, "reid": 0, "name": "舞蹈", "logo": "", "goto": "", "param": "", "children": [ { "tid": 20, "reid": 129, "name": "宅舞", "logo": "", "goto": "", "param": "" }, { "tid": 154, "reid": 129, "name": "三次元舞蹈", "logo": "", "goto": "", "param": "" }, { "tid": 156, "reid": 129, "name": "舞蹈教程", "logo": "http://i0.hdslb.com/u_user/f2f446184c967b47dd8ceb19e8ad634c.png", "goto": "", "param": "" } ] }, { "tid": 4, "reid": 0, "name": "游戏", "logo": "", "goto": "", "param": "", "children": [ { "tid": 17, "reid": 4, "name": "单机联机", "logo": "", "goto": "", "param": "" }, { "tid": 65, "reid": 4, "name": "网游·电竞", "logo": "", "goto": "", "param": "" }, { "tid": 136, "reid": 4, "name": "音游", "logo": "", "goto": "", "param": "" }, { "tid": 19, "reid": 4, "name": "Mugen", "logo": "", "goto": "", "param": "" }, { "tid": 121, "reid": 4, "name": "GMV", "logo": "", "goto": "", "param": "" } ] }, { "tid": 36, "reid": 0, "name": "科技", "logo": "", "goto": "", "param": "", "children": [ { "tid": 37, "reid": 36, "name": "纪录片", "logo": "", "goto": "", "param": "" }, { "tid": 124, "reid": 36, "name": "趣味科普人文", "logo": "", "goto": "", "param": "" }, { "tid": 122, "reid": 36, "name": "野生技术协会", "logo": "", "goto": "", "param": "" }, { "tid": 39, "reid": 36, "name": "演讲·公开课", "logo": "", "goto": "", "param": "" }, { "tid": 96, "reid": 36, "name": "星海", "logo": "", "goto": "", "param": "" }, { "tid": 95, "reid": 36, "name": "数码", "logo": "", "goto": "", "param": "" }, { "tid": 98, "reid": 36, "name": "机械", "logo": "", "goto": "", "param": "" } ] }, { "tid": 160, "reid": 0, "name": "生活", "logo": "http://i0.hdslb.com/bfs/archive/c2387196e2a4d1e7b2d77c6774ff398005e4953f.png", "goto": "", "param": "", "children": [ { "tid": 138, "reid": 160, "name": "搞笑", "logo": "", "goto": "", "param": "" }, { "tid": 21, "reid": 160, "name": "日常", "logo": "", "goto": "", "param": "" }, { "tid": 76, "reid": 160, "name": "美食圈", "logo": "", "goto": "", "param": "" }, { "tid": 75, "reid": 160, "name": "动物圈", "logo": "", "goto": "", "param": "" }, { "tid": 161, "reid": 160, "name": "手工", "logo": "http://i0.hdslb.com/bfs/archive/f87bb34913e8f7eeef216aba813961c47117e783.png", "goto": "", "param": "" }, { "tid": 162, "reid": 160, "name": "绘画", "logo": "http://i0.hdslb.com/bfs/archive/e6b66a76eb07f2acffd00b8f8c1cc0ff57e75e53.png", "goto": "", "param": "" }, { "tid": 163, "reid": 160, "name": "运动", "logo": "http://i0.hdslb.com/bfs/archive/5cfa7ac649cc6b292e876a483062c04c4a2d9b6c.png", "goto": "", "param": "" } ] }, { "tid": 119, "reid": 0, "name": "鬼畜", "logo": "", "goto": "", "param": "", "children": [ { "tid": 22, "reid": 119, "name": "鬼畜调教", "logo": "", "goto": "", "param": "" }, { "tid": 26, "reid": 119, "name": "音MAD", "logo": "", "goto": "", "param": "" }, { "tid": 126, "reid": 119, "name": "人力VOCALOID", "logo": "", "goto": "", "param": "" }, { "tid": 127, "reid": 119, "name": "教程演示", "logo": "", "goto": "", "param": "" } ] }, { "tid": 155, "reid": 0, "name": "时尚", "logo": "http://i0.hdslb.com/bfs/static/abea372535e68ce4206f8bad68741380.png", "goto": "", "param": "", "children": [ { "tid": 157, "reid": 155, "name": "美妆", "logo": "http://i0.hdslb.com/u_user/6c6b75e7fa62b5a9711676aa1d58d40d.png", "goto": "", "param": "" }, { "tid": 158, "reid": 155, "name": "服饰", "logo": "http://i0.hdslb.com/u_user/49ae98cf31cf190f8df27fdd665839ba.png", "goto": "", "param": "" }, { "tid": 159, "reid": 155, "name": "资讯", "logo": "http://i0.hdslb.com/u_user/909e5df75af68fc953d8dc847f7918e9.png", "goto": "", "param": "" }, { "tid": 164, "reid": 155, "name": "健身", "logo": "http://i0.hdslb.com/bfs/archive/c5da2d170056227118594ab2c70d40ad9d0eed5c.png", "goto": "", "param": "" } ] }, { "tid": 5, "reid": 0, "name": "娱乐", "logo": "http://i0.hdslb.com/bfs/archive/31fa219e86c646a45a3a054609892de1e7071f97.png", "goto": "", "param": "", "children": [ { "tid": 71, "reid": 5, "name": "综艺", "logo": "", "goto": "", "param": "" }, { "tid": 137, "reid": 5, "name": "明星", "logo": "", "goto": "", "param": "" }, { "tid": 131, "reid": 5, "name": "Korea相关", "logo": "", "goto": "", "param": "" } ] }, { "tid": 23, "reid": 0, "name": "电影", "logo": "", "goto": "", "param": "", "children": [ { "tid": 82, "reid": 23, "name": "电影相关", "logo": "", "goto": "", "param": "" }, { "tid": 85, "reid": 23, "name": "短片", "logo": "", "goto": "", "param": "" }, { "tid": 145, "reid": 23, "name": "欧美电影", "logo": "", "goto": "", "param": "" }, { "tid": 146, "reid": 23, "name": "日本电影", "logo": "", "goto": "", "param": "" }, { "tid": 147, "reid": 23, "name": "国产电影", "logo": "", "goto": "", "param": "" }, { "tid": 83, "reid": 23, "name": "其他国家", "logo": "", "goto": "", "param": "" } ] }, { "tid": 11, "reid": 0, "name": "电视剧", "logo": "", "goto": "", "param": "", "children": [ { "tid": 15, "reid": 11, "name": "连载剧集", "logo": "", "goto": "", "param": "" }, { "tid": 34, "reid": 11, "name": "完结剧集", "logo": "", "goto": "", "param": "" }, { "tid": 86, "reid": 11, "name": "特摄·布袋戏", "logo": "", "goto": "", "param": "" }, { "tid": 128, "reid": 11, "name": "电视剧相关", "logo": "", "goto": "", "param": "" } ] }, { "tid": 65539, "reid": 0, "name": "游戏中心", "logo": "http://i0.hdslb.com/bfs/archive/656df3124c81dd0e19bdc0a3e017091268b3db73.jpg", "goto": "", "param": "" } ], "message": "", "ver": "15966009282371228957" } ================================================ FILE: app/src/main/assets/search.json ================================================ { "code": 0, "data": { "items": { "archive": [ { "attentions": 0, "author": "Xiao番茄丶", "cover": "https://i0.hdslb.com/bfs/archive/0258e7dfbbfd767e42b5063c69450bfc91fe02ba.jpg", "danmaku": 24, "desc": "http://www.budejie.com/pc/25385657.html怎么没有蓝火?", "duration": "0:8", "goto": "av", "param": "11345283", "play": 39302, "started": 0, "status": 0, "title": "社会王:我爱你,哪怕是你不经意的一句玩笑,我也跑遍世界找给你(你要的加特林)", "total_count": 0, "uri": "bilibili://video/11345283" }, { "attentions": 0, "author": "冬日蜀黍", "cover": "https://i0.hdslb.com/bfs/archive/6f785f0e87c4870a3dcd904bfc38eb3644702b0e.jpg", "danmaku": 1613, "desc": "一个大坑终于要完结了。游戏名:以罪之名。", "duration": "41:51", "goto": "av", "param": "11400445", "play": 9073, "started": 0, "status": 0, "title": "【悬疑剧场】最终回!国王游戏!!", "total_count": 0, "uri": "bilibili://video/11400445" }, { "attentions": 0, "author": "怕上火暴王老菊", "cover": "https://i0.hdslb.com/bfs/archive/01c7b8abe1f1b8107006108d11e24724a54aae60.jpg", "danmaku": 9006, "desc": "感觉尾巴肥肥肉肉好好吃", "duration": "62:32", "goto": "av", "param": "11370914", "play": 304223, "started": 0, "status": 0, "title": "【王老菊】肉鸽之魂,神奇的天路~10", "total_count": 0, "uri": "bilibili://video/11370914" }, { "attentions": 0, "author": "泽野螳螂", "cover": "https://i0.hdslb.com/bfs/archive/5b84c45c82c42b3e89ec81a25013d7bba3950fe7.jpg", "danmaku": 1050, "desc": "最近玩了这游戏,一不小心就鬼畜了一下", "duration": "1:48", "goto": "av", "param": "11337665", "play": 133669, "started": 0, "status": 0, "title": "双♂王咆哮", "total_count": 0, "uri": "bilibili://video/11337665" }, { "attentions": 0, "author": "OELoop", "cover": "https://i0.hdslb.com/bfs/archive/91fbace64632a65dab2f2751eae3e948ec6aab2c.png", "danmaku": 2760, "desc": "爷爷第一首凳上摇滚金曲!科科嗷!", "duration": "1:13", "goto": "av", "param": "10550263", "play": 809482, "started": 0, "status": 0, "title": "【王健林】管它几亿!", "total_count": 0, "uri": "bilibili://video/10550263" }, { "attentions": 0, "author": "友人么么哒", "cover": "https://i0.hdslb.com/bfs/archive/37f4bf3e36942c8dc324ce117f00023b7a649287.jpg", "danmaku": 3476, "desc": "《王者?别闹!》第一集,狄仁杰1V9? 我可能有一帮假队友…… (╯°Д°)╯更多精彩请关注 微信公众号:友人么么哒微博:@友人在此", "duration": "3:54", "goto": "av", "param": "11027659", "play": 145128, "started": 0, "status": 0, "title": "王者?别闹!第1集", "total_count": 0, "uri": "bilibili://video/11027659" }, { "attentions": 0, "author": "★⑥檤轮囬★", "cover": "https://i0.hdslb.com/bfs/archive/3c5275c187c5172946038bb68acc7c007b81372c.jpg", "danmaku": 1156, "desc": "欢迎关注新浪微博:http://weibo.com/liudao", "duration": "12:25", "goto": "av", "param": "11391291", "play": 99130, "started": 0, "status": 0, "title": "【六道杂谈】游戏王最终战:游戏VS亚图姆!内奸龙完成三杀", "total_count": 0, "uri": "bilibili://video/11391291" }, { "attentions": 0, "author": "水一大魔王", "cover": "https://i0.hdslb.com/bfs/archive/0930261fa3005dc86677e3262407a2620e56a1e3.jpg", "danmaku": 2778, "desc": "新浪微博水一亦寒", "duration": "24:59", "goto": "av", "param": "11371504", "play": 68185, "started": 0, "status": 0, "title": "【王者荣耀】3000法强的嬴政伤害有多恐怖?逆风血战大神车队", "total_count": 0, "uri": "bilibili://video/11371504" }, { "attentions": 0, "author": "怕上火暴王老菊", "cover": "https://i0.hdslb.com/bfs/archive/d9c5de61bd83bd14762c280393b9740b5a8732f1.jpg", "danmaku": 2716, "desc": "新的夜世界模式我已经摸透了。开始我以为这是一个莽到极致的游戏,后来发现还需要智商时刻在线,这么说来,这游戏还真是适合我呢。", "duration": "29:56", "goto": "av", "param": "11344178", "play": 308562, "started": 0, "status": 0, "title": "王老菊教你当部落酋长", "total_count": 0, "uri": "bilibili://video/11344178" }, { "attentions": 0, "author": "浣熊君", "cover": "https://i0.hdslb.com/bfs/archive/70401e732e6ce88d3b1ad1773ec793a1f78e98e2.png", "danmaku": 345, "desc": "《王者荣耀》逗比AG超玩会YY90006解说 虎牙主播浣熊致力于英雄尝鲜和新玩法的开辟,希望大家能帮忙点点订阅投个币收藏转发走一走,谢谢各位观众朋友!QQ2864670814。微博:浣熊君主播。虎牙直播搜索浣熊君头像和我一样或直播地址:http://www.huya.com/huanxiongjun 每天晚上6-10王者荣耀和周末早上7-11传说对决~", "duration": "12:46", "goto": "av", "param": "11383437", "play": 29462, "started": 0, "status": 0, "title": "王者荣耀:这只熊从来没用过李白~掏出来屠杀直冲黑耀段位", "total_count": 0, "uri": "bilibili://video/11383437" }, { "attentions": 0, "author": "怕上火暴王老菊", "cover": "https://i0.hdslb.com/bfs/archive/0ef1012ad43b6ad145257de51b42d58e91076fcb.jpg", "danmaku": 11196, "desc": "轻轻松松", "duration": "51:46", "goto": "av", "param": "11198197", "play": 308561, "started": 0, "status": 0, "title": "【王老菊】肉鸽之魂,电力靓基~07", "total_count": 0, "uri": "bilibili://video/11198197" }, { "attentions": 0, "author": "腾讯综艺", "cover": "https://i0.hdslb.com/bfs/archive/8092fb4aaa30d05c3fb3f7d2cbee738a79ae0f53.jpg", "danmaku": 7318, "desc": "是一档明星美食脱口秀节目。节目由何炅与王嘉尔一起担任主持,每期2位明星大咖和自己的冰箱一起来到节目现场,通过揭秘冰箱来与6位性格各异的主厨畅聊美食生活、八卦趣事,每期两位主厨利用明星冰箱食材进行15分钟创意料理对决,第3季特别出现X厨师,与原有八位冰箱家族厨师厨艺对决。", "duration": "0:0", "goto": "av", "param": "11327809", "play": 104890, "started": 0, "status": 0, "title": "【拜托了冰箱 第三季】第10期:全场大哭!姚晨现场打拳K.O王嘉尔,何炅神秘冰箱首次开启", "total_count": 0, "uri": "bilibili://video/11327809" }, { "attentions": 0, "author": "极帅GG小给给", "cover": "https://i0.hdslb.com/bfs/archive/a3b07375d650f38f5c9d0dcedea9affcdcc680d5.jpg", "danmaku": 1009, "desc": "微博:http://weibo.com/jishuaigg", "duration": "5:51", "goto": "av", "param": "11283097", "play": 43460, "started": 0, "status": 0, "title": "[乱斗吧勇士VS王者荣耀]4399这游戏和王者荣耀很像啊!", "total_count": 0, "uri": "bilibili://video/11283097" }, { "attentions": 0, "author": "吾乃光标学徒", "cover": "https://i0.hdslb.com/bfs/archive/8e25d9e49296ac5e6d0204349468adf07d5d6d9d.jpg", "danmaku": 351, "desc": "huya.com/heigou自制 黑店百地直播录制,每天18:55直播(一般迟到20分钟),YY90077,虎牙直播,主打上单肉,常玩上单的同学可以关注下新浪微博:上单主播黑店百地非常感谢up主龙猫kiyomi提供的技术支持", "duration": "193:28", "goto": "av", "param": "11397184", "play": 10157, "started": 0, "status": 0, "title": "【黑狗直播】6.15合集,皇子蛮王船长狗头,又和妹狗包下打了一局", "total_count": 0, "uri": "bilibili://video/11397184" }, { "attentions": 0, "author": "影视狂魔老王", "cover": "https://i0.hdslb.com/bfs/archive/8b74d7f8bdc57022d9f3214e74ab236015ea1942.jpg", "danmaku": 158, "desc": "国产神作《整容游戏》05!小黑陈浩身份大揭秘!隐藏BOSS终于现身!", "duration": "5:12", "goto": "av", "param": "11398947", "play": 24183, "started": 0, "status": 0, "title": "【老王】国产神作《整容游戏》05!小黑陈浩身份大揭秘!隐藏BOSS终于现身!", "total_count": 0, "uri": "bilibili://video/11398947" }, { "attentions": 0, "author": "水一大魔王", "cover": "https://i0.hdslb.com/bfs/archive/2cabab9a35aadc9b20ff1b236d11030e70c87cea.jpg", "danmaku": 2848, "desc": "新浪微博水一亦寒", "duration": "16:5", "goto": "av", "param": "11405493", "play": 42078, "started": 0, "status": 0, "title": "【王者荣耀】赵云韩信单挑谁强?国服第一赵云追着韩信跑!", "total_count": 0, "uri": "bilibili://video/11405493" }, { "attentions": 0, "author": "伊丽莎白鼠", "cover": "https://i0.hdslb.com/bfs/archive/615f086a40c2d1dde2087c69947ae05bed29a4e2.jpg", "danmaku": 13701, "desc": "广西南宁,广西南宁!王八牌皮鞋,原价一百多,现价三百多!买不了上当,买不了吃亏!------------------------------------------------------------------------(白鼠年纪大了,基本没时间做鬼畜啦,今天还能更新,就觉得是自己的福气,祝大家在新的一年里,有更多更好看的鬼畜,新年快乐!", "duration": "0:58", "goto": "av", "param": "8247204", "play": 3566352, "started": 0, "status": 0, "title": "【最强卖鞋哥】这双王八牌皮鞋,我买定了!", "total_count": 0, "uri": "bilibili://video/8247204" }, { "attentions": 0, "author": "请与逗比同归于尽", "cover": "https://i0.hdslb.com/bfs/archive/6116b36db57891bf5457e34bf370653657578ab5.jpg", "danmaku": 305, "desc": "我是一名王者荣耀逗比主播~更多搞笑短片欢迎关注新浪微博 @请与逗比同归于尽。直播地点:斗鱼TV,房间2250040。如果你喜欢的话可以点顶,想看接下来内容可以点订阅哦。", "duration": "2:0", "goto": "av", "param": "11366801", "play": 63116, "started": 0, "status": 0, "title": "【王者荣耀】高渐离:开口跪,没错!我开口就得跪", "total_count": 0, "uri": "bilibili://video/11366801" }, { "attentions": 0, "author": "会拉车的猫", "cover": "https://i0.hdslb.com/bfs/archive/4732a58edac2bedd219b05452c207c815ce4e21f.jpg", "danmaku": 327, "desc": "很感谢大家喜欢这个系列,既然大家这么热情,第二弹肯定是会有的。但是up主最近在考试,所以可能会晚一些。先放个小番外吧,两个小时剪完的,嘉尔跟这首歌实在太配了哈哈哈", "duration": "1:32", "goto": "av", "param": "11345673", "play": 24238, "started": 0, "status": 0, "title": "【王嘉尔x鹿晗x迪丽热巴】【陆地夫妇】用奇怪的方式打开鹿迪-番外篇", "total_count": 0, "uri": "bilibili://video/11345673" }, { "attentions": 0, "author": "艾尔十六", "cover": "https://i0.hdslb.com/bfs/archive/c49b829d0bbb0ea0a1029ca003cb119dd548f14b.jpg", "danmaku": 6868, "desc": "自制:新·游戏王VS系列预告片:av4233538;第1集:av4377433;第2集:av4736126;第3集:av5221676;第4集:av6205823;第5集:av8538902;第6集:本视频;原作VS系列:av61421", "duration": "17:12", "goto": "av", "param": "11230200", "play": 313241, "started": 0, "status": 0, "title": "【新·游戏王VS系列】第6集:王様和吾王", "total_count": 0, "uri": "bilibili://video/11230200" } ], "movie": [ { "actors": "海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞", "area": "法国,英国,意大利", "attentions": 0, "cover": "https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg", "cover_mark": "免费观看", "desc": "1997年,戴安娜王妃车祸身亡,举国悲痛欲绝,但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨,紧急形势让王室陷入了严重的危机。但是,英王伊丽沙白(海伦•米伦Helen Mirren 饰)并没有出来稳定民心,而是携家人躲到了度假行宫。托尼•布莱尔(麦克•辛 Michael Sheen 饰)此时刚出任首相,面对此刻棘手的情势,必须尽快找到平衡各方利益的措施,让王室摆脱信任危机,女王重新修好与国民的关系,而自己也在当中树立权威。", "goto": "av", "length": 103, "param": "4605417", "screen_date": "2006-09-15 08:00:00", "staff": "导演:斯蒂芬·弗雷斯编剧:皮特·摩根", "started": 0, "status": 2, "title": "女王", "total_count": 0, "uri": "bilibili://video/4605417" }, { "actors": "卡尔·潘、Lauren Cohan、Daniel Percival、格伦·巴里", "area": "美国", "attentions": 0, "cover": "https://i0.hdslb.com/bfs/bangumi/6951d420873bc41084b33b280139d223bbcdca42.jpg", "cover_mark": "免费观看", "desc": "泰吉•巴德兰德巴德(卡尔•潘 Kal Penn 饰)带着范•维尔德的精神和大学学位,远赴英国加尔福德大学——这里是他父亲曾经“战斗”过的地方,兄弟会“狐狸与猎犬”之屋留下了父亲风光的记忆,然而来这里担任助教的泰吉并不被对方认可,狐狸与猎犬的首脑皮普反而将泰吉戏弄了一通。泰吉来到自己负责的宿舍——被戏称为马厩的败落小屋,这里住着四个边缘化的学生:研究量子物理和男女关系的盖辛,暴躁的爱尔兰人谢莫斯,沉默的宅男赛门以及不检点的女生赛迪。泰吉为了让这几位问题青年重新振作,自组鸡公牛社团向皮普的狐狸与猎犬之屋发起挑战,而皮普的女友查莉令泰吉一见钟情,于是一场关乎学生尊严和助教爱情的奋战拉开了序幕……", "goto": "av", "length": 96, "param": "3034493", "screen_date": "2006-12-01 08:00:00", "staff": "导演:Mort Nathan编剧:David Drew Gallagher", "started": 0, "status": 2, "title": "留级之王2", "total_count": 0, "uri": "bilibili://video/3034493" }, { "actors": "王敏德、雷宇扬、张文慈", "area": "中国香港", "attentions": 0, "cover": "https://i0.hdslb.com/bfs/bangumi/aea638908e68c87aeac7a9f8d455820085d75e5a.jpg", "cover_mark": "免费观看", "desc": "暑假到了,寄宿学校只留下总监Miss郑(张文慈饰)和四个学生愤祥(雷宇扬饰)、小丑(黄小莺饰)、Nokia(袁伟豪饰)及123(施念慈饰)。自从校工福婶(彭丹饰)的孙女离奇死亡,被弃置於冰箱内;而且福婶的小狗被割去头颅,一名转校生Connie(陈思颖饰)来到,连串怪事陆续发生。调查此案的于Sir(王敏德饰)险遇交通意外。Connie养父(李兆基饰)得悉一切时,便告之他们Connie是魔鬼的女儿,众人不信,反责他妖言惑众。", "goto": "av", "length": 84, "param": "3954640", "screen_date": "1999-11-18 08:00:00", "staff": "导演:刘孝伟编剧:张荣耀、刘孝伟", "started": 0, "status": 2, "title": "鬼片王之再现凶榜", "total_count": 0, "uri": "bilibili://video/3954640" } ], "season": [ { "attentions": 0, "cat_desc": "TV(1) ", "cover": "https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg", "finish": 1, "goto": "bangumi", "index": "13", "newest_cat": "tv", "newest_season": "TV", "param": "2932", "started": 0, "status": 0, "title": "打工吧!魔王大人", "total_count": 13, "uri": "bilibili://bangumi/season/2932" }, { "attentions": 0, "cat_desc": "TV(2) OVA/OAD/SP(1)", "cover": "https://i0.hdslb.com/bfs/bangumi/7ec9487f007c278733212908a6f607e4a245b1d4.jpg", "finish": 1, "goto": "bangumi", "index": "1", "newest_cat": "ova", "newest_season": "OVA", "param": "1588", "started": 0, "status": 0, "title": "罪恶王冠", "total_count": 1, "uri": "bilibili://bangumi/season/1588" }, { "attentions": 0, "cat_desc": "TV(1) ", "cover": "https://i0.hdslb.com/bfs/bangumi/29d001c8083a224da99b72239be5680c6ac907e7.jpg", "goto": "bangumi", "index": "12", "newest_cat": "tv", "newest_season": "第一季", "param": "6043", "started": 0, "status": 0, "title": "第六天魔王", "total_count": -1, "uri": "bilibili://bangumi/season/6043" } ] }, "nav": [ { "name": "番剧", "pages": 3, "show_more": 1, "total": 42, "type": 1 }, { "name": "UP主", "pages": 50, "total": 1000, "type": 2 }, { "name": "影视", "pages": 6, "show_more": 1, "total": 112, "type": 3 } ], "page": 1, "trackid": "12211699165045075750" }, "message": "", "ttl": 1 } ================================================ FILE: app/src/main/assets/user_chase.json ================================================ {"code": 0, "message": "success", "result": { "delay_notice": [], "follow_count": 8, "follows": [ { "brief": "神秘瑰丽的妖灵世界,奇奥无穷的时空妖灵之书,聂离追寻着世界的真相。美丽温柔的叶紫芸、倔强高傲的肖凝儿...", "cover": "http://i0.hdslb.com/bfs/bangumi/c57c4f3a68a3df841cbbb534c407081b431ef2f7.jpg", "ed_jump": 5, "is_finish": "0", "is_started": 1, "limitGroupId": 317, "new_ep": { "episode_id": "107005", "episode_status": 2, "index": "7", "update_time": "2017-05-30 12:00:00.0" }, "newest_ep_id": "107005", "newest_ep_index": "7", "pub_time": "2017-05-09 12:00:00", "season_id": "6159", "season_status": 2, "squareCover": "http://i0.hdslb.com/bfs/bangumi/427394ad2c27c23d90acd1b63fa17dde110fd24a.jpg", "title": "妖神记", "total_count": "40", "trailerAid": "-1", "user_season": { "attention": "1", "bp": 0, "last_ep_id": "105246", "last_ep_index": "1", "last_time": "44", "report_ts": 1495900198000 }, "weekday": "-1" }, { "brief": "总北高中自行车竞技部所属的一年级生·小野田坂道,与同年级的今泉俊辅和鸣子章吉、三年级的金城真护、卷岛...", "cover": "http://i0.hdslb.com/bfs/bangumi/afcd8b966344aa3e085b19a955c5e721020d6ce1.jpg", "ed_jump": 5, "is_finish": "0", "is_started": 1, "limitGroupId": 317, "new_ep": { "episode_id": "100449", "episode_status": 2, "index": "21", "update_time": "2017-05-30 09:00:02.0" }, "newest_ep_id": "100449", "newest_ep_index": "21", "pub_time": "2017-01-10 01:35:00", "season_id": "5794", "season_status": 2, "squareCover": "http://i0.hdslb.com/bfs/bangumi/b5a5f41250f4f1b114b478e80053401ee964be1a.jpg", "title": "飙速宅男 新世代", "total_count": "13", "trailerAid": "7325921", "user_season": { "attention": "1", "bp": 0, "last_ep_id": "", "last_ep_index": "", "last_time": "0", "report_ts": 0 }, "weekday": "2" }, { "brief": "某日早晨,普通的女子高校生・源内青收到一个神秘包裹。打开后发现里面放了名为FRAME ARMS G...", "cover": "http://i0.hdslb.com/bfs/bangumi/2aca983b744cc949e2c3346a876f9f611be9352a.jpg", "ed_jump": 5, "is_finish": "0", "is_started": 1, "limitGroupId": 317, "new_ep": { "episode_id": "103195", "episode_status": 2, "index": "9", "update_time": "2017-05-30 01:30:00.0" }, "newest_ep_id": "103195", "newest_ep_index": "9", "pub_time": "2017-04-04 01:30:00", "season_id": "5994", "season_status": 2, "squareCover": "http://i0.hdslb.com/bfs/bangumi/e7ad94b23f3060bfa0018115478785ca5f37f234.jpg", "title": "机甲少女 FRAME ARMS GIRL", "total_count": "12", "trailerAid": "-1", "user_season": { "attention": "1", "bp": 0, "last_ep_id": "", "last_ep_index": "", "last_time": "0", "report_ts": 0 }, "weekday": "2" } ], "update_count": 0 } } ================================================ FILE: app/src/main/assets/video_detail.json ================================================ { "code": 0, "data": { "aid": 9938411, "attribute": 49152, "copyright": 1, "ctime": 1497424534, "desc": "纯黑直播间:www.zhanqi.tv/666666新浪微博:weibo.com/chunheigk纯黑零食店:chlsd.taobao.com", "dislike_reasons": [ { "reason_id": 5, "reason_name": "标题党/封面党" }, { "reason_id": 6, "reason_name": "内容质量差" }, { "reason_id": 7, "reason_name": "内容/封面令人不适" }, { "reason_id": 8, "reason_name": "营销广告" } ], "duration": 1319, "elec": { "count": 83, "elec_num": 0, "elec_set": { "elec_list": [ { "elec_num": 20, "is_customize": 0, "title": "20电池" }, { "elec_num": 60, "is_customize": 0, "title": "60电池" }, { "elec_num": 450, "is_customize": 0, "title": "450电池" }, { "elec_num": 880, "is_customize": 0, "title": "880电池" }, { "elec_num": 0, "is_customize": 1, "max_elec": 99999, "min_elec": 20, "title": "自定义" } ], "elec_theme": 0, "integrity_rate": 10.00, "rmb_rate": 10.00, "round_mode": 0 }, "show": true, "total": 10065 }, "owner": { "face": "http://i1.hdslb.com/bfs/face/e8ab7b02d6576f4141ea857734b68b9dd35a5730.jpg", "mid": 585267, "name": "纯黑叔" }, "owner_ext": { "fans": 1391942, "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 1504195200000, "vipStatus": 1, "vipStatusWarn": "", "vipType": 1 } }, "pages": [ { "cid": 16428959, "dmlink": "http://comment.bilibili.com/16428959.xml", "duration": 1319, "from": "vupload", "metas": [ { "format": "mp4", "quality": 1, "size": 102288 }, { "format": "hdmp4", "quality": 2, "size": 240849 }, { "format": "flv", "quality": 3, "size": 470091 }, { "format": "flv", "quality": 4, "size": 760271 } ], "page": 1, "part": "", "vid": "", "weblink": "" } ], "pic": "http://i1.hdslb.com/bfs/archive/f350374ac3a130aec3c92e608fc3c72d72340394.jpg", "pubdate": 1492539219, "relates": [ { "aid": 2165903, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i1.hdslb.com/bfs/archive/7241c7de343ba7b106c39c2d2de30f15caa45640.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 6794, "favorite": 6363, "his_rank": 0, "now_rank": 0, "reply": 12844, "share": 0, "view": 563330 }, "title": "本视频将封印至17年愚人节" }, { "aid": 9083821, "owner": { "face": "", "mid": 0, "name": "世界Wir" }, "pic": "http://i1.hdslb.com/bfs/archive/a55c668ab2eda23c535e0db49fa97ca762cd1b21.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 129, "favorite": 669, "his_rank": 0, "now_rank": 0, "reply": 189, "share": 0, "view": 110118 }, "title": "震惊!!听说纯黑又爆(nve)照(fen)了!!?" }, { "aid": 6984920, "owner": { "face": "", "mid": 0, "name": "何悠悠玩VR" }, "pic": "http://i1.hdslb.com/bfs/archive/84308b4028ebdcf7a3528d6fc2efeed25edaed95.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 1080, "favorite": 2896, "his_rank": 0, "now_rank": 0, "reply": 1386, "share": 0, "view": 926137 }, "title": "使用VR泄欲的正确姿势 #何悠悠玩VR#" }, { "aid": 10007398, "owner": { "face": "", "mid": 0, "name": "拔总zz" }, "pic": "http://i2.hdslb.com/bfs/archive/046e1174a2ea66bb18b981b63c294ebbf89ad29f.png", "stat": { "aid": 0, "coin": 0, "danmaku": 379, "favorite": 171, "his_rank": 0, "now_rank": 0, "reply": 217, "share": 0, "view": 23801 }, "title": "【拔总】来自肌肉猛男的么么哒" }, { "aid": 1707128, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i0.hdslb.com/bfs/archive/79b8d5490c8caf7037c3c567da33cc5f52f58752.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 32036, "favorite": 7943, "his_rank": 0, "now_rank": 0, "reply": 1985, "share": 0, "view": 1370296 }, "title": "纯黑《刺客信条:大革命》第一期 完美同步攻略解说" }, { "aid": 5100283, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i2.hdslb.com/bfs/archive/31d043e2863493f5f986e00b21d1a266f309b66d.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 19122, "favorite": 3769, "his_rank": 0, "now_rank": 0, "reply": 4147, "share": 0, "view": 644622 }, "title": "纯黑《神秘海域4》惨烈超难攻略解说 第七期" }, { "aid": 10434593, "owner": { "face": "", "mid": 0, "name": "折腾5号" }, "pic": "http://i2.hdslb.com/bfs/archive/04ffab757544a1624a3a793be84a5083f838796f.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 547, "favorite": 96, "his_rank": 0, "now_rank": 0, "reply": 215, "share": 0, "view": 38041 }, "title": "《绝地求生大逃杀》还有这种吃鸡的方法?!" }, { "aid": 7685893, "owner": { "face": "", "mid": 0, "name": "陈瀚Siri" }, "pic": "http://i1.hdslb.com/bfs/archive/49d8ff0b83d7f440c6d9cbc855dc4d77863244af.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 651, "favorite": 148, "his_rank": 0, "now_rank": 0, "reply": 371, "share": 0, "view": 20200 }, "title": "【陈瀚Siri】闲逛英国圣诞节市场" }, { "aid": 10370651, "owner": { "face": "", "mid": 0, "name": "轩雨星晴" }, "pic": "http://i1.hdslb.com/bfs/archive/e1119f6726578b6ae8c643bb1bf1d608bf082ef7.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 89, "favorite": 4, "his_rank": 0, "now_rank": 0, "reply": 69, "share": 0, "view": 1467 }, "title": "【轩雨星晴语音解说】精灵宝可梦日月6V6对战实况05" }, { "aid": 3852397, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i0.hdslb.com/bfs/archive/2090debbd2b07a9d554b18eec22f50f0da0ec7d1.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 32756, "favorite": 6226, "his_rank": 0, "now_rank": 0, "reply": 3492, "share": 0, "view": 779638 }, "title": "纯黑《零:濡鸦之巫女》第一期 乳摇的污女" }, { "aid": 10151928, "owner": { "face": "", "mid": 0, "name": "敖厂长" }, "pic": "http://i0.hdslb.com/bfs/archive/6001bf94a2ee8d58056b6a3fd4107a4badb40227.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 24730, "favorite": 5558, "his_rank": 0, "now_rank": 0, "reply": 9732, "share": 0, "view": 1967237 }, "title": "【敖厂长】腾讯游戏惨遭停运" }, { "aid": 10520722, "owner": { "face": "", "mid": 0, "name": "渗透之C君" }, "pic": "http://i0.hdslb.com/bfs/archive/82626ba9034eac2a2e8b9882861a53447e1e05c0.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 22785, "favorite": 3747, "his_rank": 0, "now_rank": 0, "reply": 5376, "share": 0, "view": 813535 }, "title": "【C菌】分手! 那些和朋友玩了就会撕哔的游戏!【第二期】" }, { "aid": 11159467, "owner": { "face": "", "mid": 0, "name": "袜子ψ(`∇´)ψ" }, "pic": "http://i2.hdslb.com/bfs/archive/f0832d98d695c45297d3597f5c474d41936bc530.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 2813, "favorite": 6688, "his_rank": 0, "now_rank": 0, "reply": 397, "share": 0, "view": 499908 }, "title": "【游戏集锦】那些意外搞笑的游戏失败瞬间 133 It's Spiderman!" }, { "aid": 10204083, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i0.hdslb.com/bfs/archive/b542297a9f88270c717b5de11dfa6764e063c6ae.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 16327, "favorite": 1373, "his_rank": 0, "now_rank": 0, "reply": 2793, "share": 0, "view": 341422 }, "title": "【纯黑】《逃生2》直播录像P5 血雨腥风" }, { "aid": 3952940, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i1.hdslb.com/bfs/archive/70c348a1c5d2fce58506735cc040463328b3f77b.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 7823, "favorite": 2133, "his_rank": 0, "now_rank": 0, "reply": 1824, "share": 0, "view": 286055 }, "title": "纯黑《零:濡鸦之巫女》第二期 湿身的污女" }, { "aid": 8165165, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i1.hdslb.com/bfs/archive/5349e34c375e993743f3988bbbf3c95c8525cd50.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 12923, "favorite": 1595, "his_rank": 0, "now_rank": 0, "reply": 1729, "share": 0, "view": 325771 }, "title": "纯黑直播《返校》我不怂的恐怖游戏 P2" }, { "aid": 8145597, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i1.hdslb.com/bfs/archive/9619104d06012b74f256923a9b212d5b344e1b1e.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 29298, "favorite": 4927, "his_rank": 0, "now_rank": 0, "reply": 3133, "share": 0, "view": 688632 }, "title": "纯黑直播《返校》我完全不怂的恐怖游戏" }, { "aid": 8306491, "owner": { "face": "", "mid": 0, "name": "纯黑叔" }, "pic": "http://i1.hdslb.com/bfs/archive/591fe61e3e20ba8dbb06884369576ccd1baf9e8e.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 10583, "favorite": 866, "his_rank": 0, "now_rank": 0, "reply": 2209, "share": 0, "view": 233841 }, "title": "纯黑直播《返校》我不怂的惊悚游戏 P4" }, { "aid": 11103774, "owner": { "face": "", "mid": 0, "name": "起小点是大腿" }, "pic": "http://i1.hdslb.com/bfs/archive/bb3c35d4128fa3ea606897206b6f7eae5e219301.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 6612, "favorite": 448, "his_rank": 0, "now_rank": 0, "reply": 1680, "share": 0, "view": 399020 }, "title": "主播真会玩主机篇07:听说你是刺客大师?" }, { "aid": 10033090, "owner": { "face": "", "mid": 0, "name": "EdmundDZhang" }, "pic": "http://i2.hdslb.com/bfs/archive/7ed762519c4c44b78bb3c3948bc9e4f1060c6600.jpg", "stat": { "aid": 0, "coin": 0, "danmaku": 9780, "favorite": 3359, "his_rank": 0, "now_rank": 0, "reply": 3672, "share": 0, "view": 734743 }, "title": "【老E】职业老王VS绿帽王" } ], "req_user": { "attention": -999, "favorite": 0 }, "rights": { "bp": 0, "download": 1, "elec": 1, "hd5": 0, "movie": 0, "no_reprint": 0, "pay": 0 }, "stat": { "aid": 9938411, "coin": 15516, "danmaku": 6411, "favorite": 3362, "his_rank": 3, "now_rank": 0, "reply": 3663, "share": 658, "view": 827412 }, "state": 0, "tag": [ { "tag_id": 723488, "tag_name": "失踪人口回归!" }, { "tag_id": 125158, "tag_name": "纯黑" }, { "tag_id": 3419954, "tag_name": "无伤吃鸡" }, { "tag_id": 54705, "tag_name": "大逃杀" }, { "tag_id": 3428143, "tag_name": "大吉大利,晚上吃鸡" }, { "tag_id": 3243689, "tag_name": "绝地求生" }, { "tag_id": 3473367, "tag_name": "HANDSOMEBlack" } ], "tid": 17, "title": "【纯黑】《我能吹一年》无伤吃鸡攻略解说?", "tname": "单机联机", "videos": 1 }, "message": "", "ttl": 1 } ================================================ FILE: app/src/main/assets/video_detail_comment.json ================================================ { "code": 0, "data": { "hots": [ { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "犹豫了很久我还是决定发一下全的纯黑改名顺序(╯°Д°)╯纯黑酱→纯黑SAMA→纯黑君→纯黑桑→纯黑初号机→纯黑通行→纯黑神→纯黑神行→纯黑神行通→纯黑神行通机→纯黑神行通机号→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初桑君→纯黑昵称过长不能修改→纯黑少爷→纯黑大法好→纯黑老师→纯黑.奥迪托雷→纯黑.the ripper→纯黑骑士王→纯黑狂战士→纯黑大叔→纯黑哥居然被用了→纯黑叔", "plat": 2 }, "count": 533, "ctime": 1492540652, "floor": 546, "like": 9087, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/a076329348d82164c3f54598ee90239c17817d21.jpg", "level_info": { "current_exp": 3285, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "35666309", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "个性签名什么的好难写的,写多嫌麻烦,写少嫌不够,啊啊啊啊啊!", "uname": "一只爱作死的鸡", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 35666309, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 527, "replies": [], "root": 0, "root_str": "0", "rpid": 239713209, "rpid_str": "239713209", "state": 0, "type": 1 }, { "action": 0, "attr": 4, "content": { "device": "", "members": [], "message": "我现在在b站,只从游戏区来说的话,打开弹幕我很害怕见到五种人:第一种——没玩过的人问什么问,想知道自己买游戏去;第二种——你懂不懂XX,不懂在这……;第三种——这有啥难的,我都是一遍过或者是,这有啥难的,我随随便便就过了;第四种——玩过游戏的人都知道,没玩过的人连这都不知道看什么视频;第五种——刷XX的是不是脑子有病?", "plat": 1 }, "count": 90, "ctime": 1492618071, "floor": 2068, "like": 1227, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/24e5569de190530331bb79add588127b5867fe9c.jpg", "level_info": { "current_exp": 12070, "current_level": 5, "current_min": 10800, "next_exp": 28800 }, "mid": "698302", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2011", "sex": "保密", "sign": "最喜歡的是畫漫畫和搞音樂,失敗的是靈魂畫風以及死亡曲風;最努力的是越挫越勇永不放棄,挫敗的是在靈魂畫手以及死亡歌者的道路上越走越遠。。。。喵的,這個世界還跟不跟我過了,過不了就趕緊離了我找我家蓋亞去!", "uname": "偷抱走大和的提督姬", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 1489507200000, "vipStatus": 0, "vipStatusWarn": "", "vipType": 1 } }, "mid": 698302, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 87, "replies": [], "root": 0, "root_str": "0", "rpid": 240261490, "rpid_str": "240261490", "state": 6, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "硬币改名纯黑叔拖更狂魔死不出有生之年何缘故无伤第一谁不服", "plat": 2 }, "count": 71, "ctime": 1492543405, "floor": 825, "like": 2417, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/7259bff4b450b03fd44598da8ece826e373805c5.jpg", "level_info": { "current_exp": 7396, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "45374791", "nameplate": { "condition": "单个自制视频总播放数>=1万", "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", "image_small": "http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", "level": "普通勋章", "name": "青铜殿堂", "nid": 4 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "微博【同名ID】:吾名为头像是也( ̄~ ̄;)包括舞见唱见全部都可分为两个区!鬼畜区和鬼畜素材区!待我学成之日!便是鬼畜之时!", "uname": "吾名为头像是也", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 45374791, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 69, "replies": [], "root": 0, "root_str": "0", "rpid": 239719003, "rpid_str": "239719003", "state": 0, "type": 1 } ], "page": { "acount": 3662, "count": 2497, "num": 1, "size": 20 }, "replies": [ { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "快要去上学了。。。临走前再来看一遍只为了少爷的笑声", "plat": 2 }, "count": 0, "ctime": 1497217492, "floor": 2607, "like": 4, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/eaa397628ca0d586e2e6b9d90992ba347c7f3337.jpg", "level_info": { "current_exp": 240, "current_level": 2, "current_min": 200, "next_exp": 1500 }, "mid": "110842363", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2017", "sex": "男", "sign": "永爱教主~", "uname": "忆尔旧容", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 110842363, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 282388969, "rpid_str": "282388969", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "求问九分左右的BGM名~", "plat": 1 }, "count": 0, "ctime": 1497190982, "floor": 2606, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/3f990bb10706b7a5808f33a78a7dcb0bf4d3ad23.jpg", "level_info": { "current_exp": 4019, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "7522768", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2014", "sex": "女", "sign": "错的不是我,是这个世界。", "uname": "宇智波六道", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 1478707200000, "vipStatus": 0, "vipStatusWarn": "", "vipType": 1 } }, "mid": 7522768, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 282181980, "rpid_str": "282181980", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "只有我觉得允大吊和纯黑的声音很像吗?", "plat": 1 }, "count": 0, "ctime": 1496196985, "floor": 2605, "like": 7, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/154e19f906983e93ddeb08d0060b578ec21e48fd.jpg", "level_info": { "current_exp": 3481, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "26718080", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "我是桐乃的小虎牙~", "uname": "喵脸老太", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 26718080, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 272254379, "rpid_str": "272254379", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "phone", "members": [], "message": "封面看起来像土鸡(°∀°)ノ", "plat": 3 }, "count": 0, "ctime": 1496155864, "floor": 2604, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/dcafa424f65cbef144af04d12e56801309ef2def.jpg", "level_info": { "current_exp": 6683, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "22086941", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "女", "sign": "", "uname": "long855", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 22086941, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 272015657, "rpid_str": "272015657", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "真以为是露脸吃鸡", "plat": 2 }, "count": 0, "ctime": 1496136331, "floor": 2603, "like": 0, "member": { "DisplayRank": "1040", "avatar": "http://i1.hdslb.com/bfs/face/e55c3b51e282668c42c75e641008a9ec722cf3e5.jpg", "level_info": { "current_exp": 10438, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "1836477", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2011", "sex": "保密", "sign": "壮哉!我大xzyx星", "uname": "企鹅桑麻", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 1485187200000, "vipStatus": 0, "vipStatusWarn": "", "vipType": 1 } }, "mid": 1836477, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 271694974, "rpid_str": "271694974", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "看封面,以为是户外视频", "plat": 2 }, "count": 0, "ctime": 1495936965, "floor": 2602, "like": 5, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/67f7dce5ac4358d42c6e25a211f95d970c5905e3.jpg", "level_info": { "current_exp": 7921, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "14702410", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "男", "sign": "", "uname": "OriginalWheat", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 14702410, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 269383496, "rpid_str": "269383496", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "大吉大利,今晚吃鸡,吧", "plat": 2 }, "count": 1, "ctime": 1495282867, "floor": 2601, "like": 8, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg", "level_info": { "current_exp": 4165, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "16511894", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "保密", "sign": "= ̄ω ̄=", "uname": "吃人的狮子", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 16511894, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 1, "replies": [ { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "低仿球~( ̄▽ ̄~)", "plat": 2 }, "count": 0, "ctime": 1496133583, "floor": 1, "like": 1, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/b82cb0bb8cd8cd1d97bc8b3313843267a58626e4.jpg", "level_info": { "current_exp": 2345, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "37295447", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "嗯哼", "uname": "cx阎哼哼", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 37295447, "oid": 9938411, "parent": 263465780, "parent_str": "263465780", "rcount": 0, "root": 263465780, "root_str": "263465780", "rpid": 271654745, "rpid_str": "271654745", "state": 0, "type": 1 } ], "root": 0, "root_str": "0", "rpid": 263465780, "rpid_str": "263465780", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "有没有大神知道封面的鸡出自哪里?怎么做的?看得我好饿啊。", "plat": 2 }, "count": 1, "ctime": 1495268302, "floor": 2600, "like": 9, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/93ca945ad64a8ca634ef6f423e5f9962d0a94cb7.jpg", "level_info": { "current_exp": 1598, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "9148371", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "男", "sign": "", "uname": "lawere", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 9148371, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 1, "replies": [ { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "锅里= ̄ω ̄=", "plat": 2 }, "count": 0, "ctime": 1495282800, "floor": 1, "like": 2, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg", "level_info": { "current_exp": 4165, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "16511894", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "保密", "sign": "= ̄ω ̄=", "uname": "吃人的狮子", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 16511894, "oid": 9938411, "parent": 263256410, "parent_str": "263256410", "rcount": 0, "root": 263256410, "root_str": "263256410", "rpid": 263464752, "rpid_str": "263464752", "state": 0, "type": 1 } ], "root": 0, "root_str": "0", "rpid": 263256410, "rpid_str": "263256410", "state": 0, "type": 1 }, { "action": 0, "attr": 4, "content": { "device": "", "members": [], "message": "一开始纯黑:枪,枪,枪!拿到枪纯黑:叫我少爷!", "plat": 2 }, "count": 0, "ctime": 1495259620, "floor": 2599, "like": 7, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/a39edd4a8905c8e49a1dfeb0f573e18d19214d65.jpg", "level_info": { "current_exp": 4912, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "24772731", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "小白啊,最喜欢的是妲己姐姐。", "uname": "百年之狐_李小白", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 24772731, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 263157372, "rpid_str": "263157372", "state": 6, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "pad", "members": [], "message": "有没有大神知道封面的鸡出自哪里?怎么做的?看得我好饿啊。", "plat": 6 }, "count": 0, "ctime": 1494719336, "floor": 2597, "like": 13, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/4688f58def420edaf625aa2f31e5e47d31667f94.jpg", "level_info": { "current_exp": 4212, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "28732585", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "I hentai", "uname": "老干爹辣子鸡", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 28732585, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 258391770, "rpid_str": "258391770", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "实力棒棒的。", "plat": 2 }, "count": 0, "ctime": 1494604861, "floor": 2596, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/a809a3b8407840ae00032360108261fcf503d38a.jpg", "level_info": { "current_exp": 3845, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "32704916", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "男", "sign": "暴力不能解决一切问题。但是可以解决制造出一切问题的那个人。", "uname": "Planeswalker菲", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 1478707200000, "vipStatus": 0, "vipStatusWarn": "", "vipType": 1 } }, "mid": 32704916, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 257369684, "rpid_str": "257369684", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "封面看得我好饿", "plat": 2 }, "count": 0, "ctime": 1494505741, "floor": 2595, "like": 3, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/1c853b900f9e7db4ad65ae91c73aa2f5de1d6b65.jpg", "level_info": { "current_exp": 5970, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "31610916", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "", "uname": "幼齿萝莉八云紫", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 31610916, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 256445378, "rpid_str": "256445378", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "见封滚", "plat": 2 }, "count": 0, "ctime": 1494391511, "floor": 2594, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/248e3f11749b5726efdecbdaef8885ccf45c0ff9.jpg", "level_info": { "current_exp": 3960, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "14102482", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "男", "sign": "change never end", "uname": "夏伯陽", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 14102482, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 255490068, "rpid_str": "255490068", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "原来黑叔也玩这个_(:з」∠)_", "plat": 2 }, "count": 0, "ctime": 1494276406, "floor": 2593, "like": 1, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/954d7e784d44fed5d47c9f739bdb0bd0c794a783.jpg", "level_info": { "current_exp": 4491, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "21071998", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2016", "sex": "保密", "sign": "独而不孤,行走天涯", "uname": "耗子阿独", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 21071998, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 254688287, "rpid_str": "254688287", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "(=・ω・=)", "plat": 2 }, "count": 0, "ctime": 1494249140, "floor": 2592, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://static.hdslb.com/images/member/noface.gif", "level_info": { "current_exp": 925, "current_level": 2, "current_min": 200, "next_exp": 1500 }, "mid": "102758826", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2017", "sex": "保密", "sign": "好冷啊", "uname": "云雨老道", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 102758826, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 254451554, "rpid_str": "254451554", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "phone", "members": [], "message": "什么游戏", "plat": 3 }, "count": 1, "ctime": 1494166451, "floor": 2591, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/cdde35d4074d5a811ebd34474d8e5f66a1bbebbe.jpg", "level_info": { "current_exp": 5235, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "10399882", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "男", "sign": "", "uname": "姑苏一夜繁华梦", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 10399882, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 1, "replies": [ { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "绝地求生大逃杀", "plat": 2 }, "count": 0, "ctime": 1495282838, "floor": 1, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg", "level_info": { "current_exp": 4165, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "16511894", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "保密", "sign": "= ̄ω ̄=", "uname": "吃人的狮子", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 16511894, "oid": 9938411, "parent": 253837118, "parent_str": "253837118", "rcount": 0, "root": 253837118, "root_str": "253837118", "rpid": 263465348, "rpid_str": "263465348", "state": 0, "type": 1 } ], "root": 0, "root_str": "0", "rpid": 253837118, "rpid_str": "253837118", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "急求BGM", "plat": 1 }, "count": 2, "ctime": 1494157751, "floor": 2590, "like": 1, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/016bdf3f5879913fbc9e5db802bf5444c603b82d.jpg", "level_info": { "current_exp": 1308, "current_level": 2, "current_min": 200, "next_exp": 1500 }, "mid": "87794382", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2017", "sex": "保密", "sign": "闲的慌,真的是闲的慌。", "uname": "进撃のkv2", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 87794382, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 2, "replies": [ { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "19分钟后的 美シキ歌-帆足圭吾 之前的我不知道", "plat": 2 }, "count": 0, "ctime": 1494522352, "floor": 1, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/0ac7d6d9626de10de6206c9f559842616cfdda3d.jpg", "level_info": { "current_exp": 6475, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "8991975", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "女", "sign": "nemo", "uname": "MisakiNemo", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 8991975, "oid": 9938411, "parent": 253703966, "parent_str": "253703966", "rcount": 0, "root": 253703966, "root_str": "253703966", "rpid": 256682586, "rpid_str": "256682586", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "基本都是尼尔的BGM,去网易云直接搜,有专辑的", "plat": 1 }, "count": 0, "ctime": 1494823719, "floor": 2, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i0.hdslb.com/bfs/face/2366b8a48439998fbd34b56ceefd35204c7c1388.jpg", "level_info": { "current_exp": 3934, "current_level": 3, "current_min": 1500, "next_exp": 4500 }, "mid": "12625520", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "女", "sign": "", "uname": "博丽灵梦♂节操", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 12625520, "oid": 9938411, "parent": 253703966, "parent_str": "253703966", "rcount": 0, "root": 253703966, "root_str": "253703966", "rpid": 259412494, "rpid_str": "259412494", "state": 0, "type": 1 } ], "root": 0, "root_str": "0", "rpid": 253703966, "rpid_str": "253703966", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "急求BGM", "plat": 1 }, "count": 0, "ctime": 1494157716, "floor": 2589, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/016bdf3f5879913fbc9e5db802bf5444c603b82d.jpg", "level_info": { "current_exp": 1308, "current_level": 2, "current_min": 200, "next_exp": 1500 }, "mid": "87794382", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2017", "sex": "保密", "sign": "闲的慌,真的是闲的慌。", "uname": "进撃のkv2", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 87794382, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 253703527, "rpid_str": "253703527", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "讲道理一开始还以为少爷转行美食区了(=・ω・=)", "plat": 2 }, "count": 0, "ctime": 1494080060, "floor": 2588, "like": 3, "member": { "DisplayRank": "0", "avatar": "http://i1.hdslb.com/bfs/face/cd1547ceb5a6eaa654a54e3b8510ff062ecf7465.jpg", "level_info": { "current_exp": 8118, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "8989809", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "保密", "sign": "看我一头乌黑靓丽的秀发,用飘柔,就是这么自信", "uname": "长草的孔明", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 8989809, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 252874067, "rpid_str": "252874067", "state": 0, "type": 1 }, { "action": 0, "attr": 0, "content": { "device": "", "members": [], "message": "厉害厉害(=・ω・=)", "plat": 2 }, "count": 0, "ctime": 1494061984, "floor": 2587, "like": 0, "member": { "DisplayRank": "0", "avatar": "http://i2.hdslb.com/bfs/face/1786752aebc7d41952b872dd3cb80aa39a96857b.jpg", "level_info": { "current_exp": 5488, "current_level": 4, "current_min": 4500, "next_exp": 10800 }, "mid": "11328101", "nameplate": { "condition": "", "image": "", "image_small": "", "level": "", "name": "", "nid": 0 }, "official_verify": { "desc": "", "type": -1 }, "pendant": { "expire": 0, "image": "", "name": "", "pid": 0 }, "rank": "10000", "reg_year": "2015", "sex": "女", "sign": "事不能拖 话不能多 人不能作", "uname": "Enril·云风", "vip": { "accessStatus": 1, "dueRemark": "", "vipDueDate": 0, "vipStatus": 0, "vipStatusWarn": "", "vipType": 0 } }, "mid": 11328101, "oid": 9938411, "parent": 0, "parent_str": "0", "rcount": 0, "replies": [], "root": 0, "root_str": "0", "rpid": 252596582, "rpid_str": "252596582", "state": 0, "type": 1 } ], "upper": { "mid": 585267 } }, "message": "0", "ttl": 1 } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/CustomerLogo.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import android.graphics.Bitmap; import android.view.View.OnClickListener; /** 九宫格自定义的图标对象 */ public class CustomerLogo { public String label; public Bitmap logo; public OnClickListener listener; } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/OnekeyShare.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import android.content.Context; import android.graphics.Bitmap; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import com.mob.MobSDK; import com.mob.tools.utils.BitmapHelper; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; /** * 快捷分享的入口 *

* 通过不同的setter设置参数,然后调用{@link #show(Context)}方法启动快捷分享 */ public class OnekeyShare { private HashMap params; public OnekeyShare() { params = new HashMap(); params.put("customers", new ArrayList()); params.put("hiddenPlatforms", new HashMap()); } /** address是接收人地址,仅在信息和邮件使用,否则可以不提供 */ public void setAddress(String address) { params.put("address", address); } /** * title标题,在印象笔记、邮箱、信息、微信(包括好友、朋友圈和收藏)、 * 易信(包括好友、朋友圈)、人人网和QQ空间使用,否则可以不提供 */ public void setTitle(String title) { params.put("title", title); } /** titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供 */ public void setTitleUrl(String titleUrl) { params.put("titleUrl", titleUrl); } /** text是分享文本,所有平台都需要这个字段 */ public void setText(String text) { params.put("text", text); } /** 获取text字段的值 */ public String getText() { return params.containsKey("text") ? String.valueOf(params.get("text")) : null; } /** imagePath是本地的图片路径,除Linked-In外的所有平台都支持这个字段 */ public void setImagePath(String imagePath) { if(!TextUtils.isEmpty(imagePath)) { params.put("imagePath", imagePath); } } /** imageUrl是图片的网络路径,新浪微博、人人网、QQ空间和Linked-In支持此字段 */ public void setImageUrl(String imageUrl) { if (!TextUtils.isEmpty(imageUrl)) { params.put("imageUrl", imageUrl); } } /** url在微信(包括好友、朋友圈收藏)和易信(包括好友和朋友圈)中使用,否则可以不提供 */ public void setUrl(String url) { params.put("url", url); } /** filePath是待分享应用程序的本地路劲,仅在微信(易信)好友和Dropbox中使用,否则可以不提供 */ public void setFilePath(String filePath) { params.put("filePath", filePath); } /** comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供 */ public void setComment(String comment) { params.put("comment", comment); } /** site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供 */ public void setSite(String site) { params.put("site", site); } /** siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供 */ public void setSiteUrl(String siteUrl) { params.put("siteUrl", siteUrl); } /** foursquare分享时的地方名 */ public void setVenueName(String venueName) { params.put("venueName", venueName); } /** foursquare分享时的地方描述 */ public void setVenueDescription(String venueDescription) { params.put("venueDescription", venueDescription); } /** 分享地纬度,新浪微博、腾讯微博和foursquare支持此字段 */ public void setLatitude(float latitude) { params.put("latitude", latitude); } /** 分享地经度,新浪微博、腾讯微博和foursquare支持此字段 */ public void setLongitude(float longitude) { params.put("longitude", longitude); } /** 是否直接分享 */ public void setSilent(boolean silent) { params.put("silent", silent); } /** 设置编辑页的初始化选中平台 */ public void setPlatform(String platform) { params.put("platform", platform); } /** 设置KakaoTalk的应用下载地址 */ public void setInstallUrl(String installurl) { params.put("installurl", installurl); } /** 设置KakaoTalk的应用打开地址 */ public void setExecuteUrl(String executeurl) { params.put("executeurl", executeurl); } /** 设置微信分享的音乐的地址 */ public void setMusicUrl(String musicUrl) { params.put("musicUrl", musicUrl); } /** 设置自定义的外部回调 */ public void setCallback(PlatformActionListener callback) { params.put("callback", callback); } /** 返回操作回调 */ public PlatformActionListener getCallback() { return ResHelper.forceCast(params.get("callback")); } /** 设置用于分享过程中,根据不同平台自定义分享内容的回调 */ public void setShareContentCustomizeCallback(ShareContentCustomizeCallback callback) { params.put("customizeCallback", callback); } /** 自定义不同平台分享不同内容的回调 */ public ShareContentCustomizeCallback getShareContentCustomizeCallback() { return ResHelper.forceCast(params.get("customizeCallback")); } /** 设置自己图标和点击事件,可以重复调用添加多次 */ public void setCustomerLogo(Bitmap logo, String label, OnClickListener ocl) { CustomerLogo cl = new CustomerLogo(); cl.logo = logo; cl.label = label; cl.listener = ocl; ArrayList customers = ResHelper.forceCast(params.get("customers")); customers.add(cl); } /** 设置一个总开关,用于在分享前若需要授权,则禁用sso功能 */ public void disableSSOWhenAuthorize() { params.put("disableSSO", true); } /** 设置视频网络地址 */ public void setVideoUrl(String url) { params.put("url", url); params.put("shareType", Platform.SHARE_VIDEO); } /** 设置编辑页面的显示模式为Dialog模式 */ @Deprecated public void setDialogMode() { params.put("dialogMode", true); } /** 添加一个隐藏的platform */ public void addHiddenPlatform(String platform) { HashMap hiddenPlatforms = ResHelper.forceCast(params.get("hiddenPlatforms")); hiddenPlatforms.put(platform, platform); } /** 设置一个将被截图分享的View , surfaceView是截不了图片的*/ public void setViewToShare(View viewToShare) { try { Bitmap bm = BitmapHelper.captureView(viewToShare, viewToShare.getWidth(), viewToShare.getHeight()); params.put("viewToShare", bm); } catch (Throwable e) { e.printStackTrace(); } } /** 腾讯微博分享多张图片 */ public void setImageArray(String[] imageArray) { params.put("imageArray", imageArray); } /** 设置在执行分享到QQ或QZone的同时,分享相同的内容腾讯微博 */ public void setShareToTencentWeiboWhenPerformingQQOrQZoneSharing() { params.put("isShareTencentWeibo", true); } /** 设置分享界面的样式,目前只有一种,不需要设置 */ public void setTheme(OnekeyShareTheme theme) { params.put("theme", theme.getValue()); } @SuppressWarnings("unchecked") public void show(Context context) { HashMap shareParamsMap = new HashMap(); shareParamsMap.putAll(params); MobSDK.init(context.getApplicationContext()); ShareSDK.initSDK(context); // 打开分享菜单的统计 ShareSDK.logDemoEvent(1, null); int iTheme = 0; try { iTheme = ResHelper.parseInt(String.valueOf(shareParamsMap.remove("theme"))); } catch (Throwable t) {} OnekeyShareTheme theme = OnekeyShareTheme.fromValue(iTheme); OnekeyShareThemeImpl themeImpl = theme.getImpl(); themeImpl.setShareParamsMap(shareParamsMap); themeImpl.setDialogMode(shareParamsMap.containsKey("dialogMode") ? ((Boolean) shareParamsMap.remove("dialogMode")) : false); themeImpl.setSilent(shareParamsMap.containsKey("silent") ? ((Boolean) shareParamsMap.remove("silent")) : false); themeImpl.setCustomerLogos((ArrayList) shareParamsMap.remove("customers")); themeImpl.setHiddenPlatforms((HashMap) shareParamsMap.remove("hiddenPlatforms")); themeImpl.setPlatformActionListener((PlatformActionListener) shareParamsMap.remove("callback")); themeImpl.setShareContentCustomizeCallback((ShareContentCustomizeCallback) shareParamsMap.remove("customizeCallback")); if (shareParamsMap.containsKey("disableSSO") ? ((Boolean) shareParamsMap.remove("disableSSO")) : false) { themeImpl.disableSSO(); } themeImpl.show(context.getApplicationContext()); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/OnekeySharePage.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import com.mob.tools.FakeActivity; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.Platform.ShareParams; import cn.sharesdk.framework.PlatformActionListener; /** 快捷分享的基类 */ public class OnekeySharePage extends FakeActivity { private OnekeyShareThemeImpl impl; public OnekeySharePage(OnekeyShareThemeImpl impl) { this.impl = impl; } /** 分享界面是否弹窗模式 */ protected final boolean isDialogMode() { return impl.dialogMode; } protected final HashMap getShareParamsMap() { return impl.shareParamsMap; } /** 静默分享开关(没有界面,直接分享 )*/ protected final boolean isSilent() { return impl.silent; } protected final ArrayList getCustomerLogos() { return impl.customerLogos; } protected final HashMap getHiddenPlatforms() { return impl.hiddenPlatforms; } protected final PlatformActionListener getCallback() { return impl.callback; } protected final ShareContentCustomizeCallback getCustomizeCallback() { return impl.customizeCallback; } protected final boolean isDisableSSO() { return impl.disableSSO; } protected final void shareSilently(Platform platform) { impl.shareSilently(platform); } protected final ShareParams formateShareData(Platform platform) { if (impl.formateShareData(platform)) { return impl.shareDataToShareParams(platform); } return null; } protected final boolean isUseClientToShare(Platform platform) { return impl.isUseClientToShare(platform); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/OnekeyShareTheme.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import cn.sharesdk.onekeyshare.themes.classic.ClassicTheme; /** 快捷分享的主题样式 */ public enum OnekeyShareTheme { /** 九格宫的主题样式 ,对应的实现类ClassicTheme */ CLASSIC(0, new ClassicTheme()); private final int value; private final OnekeyShareThemeImpl impl; private OnekeyShareTheme(int value, OnekeyShareThemeImpl impl) { this.value = value; this.impl = impl; } public int getValue() { return value; } public OnekeyShareThemeImpl getImpl() { return impl; } public static OnekeyShareTheme fromValue(int value) { for (OnekeyShareTheme theme : OnekeyShareTheme.values()) { if (theme.value == value) { return theme; } } return CLASSIC; } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/OnekeyShareThemeImpl.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.os.Handler.Callback; import android.os.Message; import android.text.TextUtils; import android.widget.Toast; import com.mob.tools.utils.ResHelper; import com.mob.tools.utils.UIHandler; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.CustomPlatform; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.Platform.ShareParams; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; /** 快捷分享的主题样式的实现父类 */ public abstract class OnekeyShareThemeImpl implements PlatformActionListener, Callback { protected boolean dialogMode; protected HashMap shareParamsMap; protected boolean silent; protected ArrayList customerLogos; protected HashMap hiddenPlatforms; protected PlatformActionListener callback; protected ShareContentCustomizeCallback customizeCallback; protected boolean disableSSO; protected Context context; public OnekeyShareThemeImpl() { callback = this; } public final void setDialogMode(boolean dialogMode) { this.dialogMode = dialogMode; } public final void setShareParamsMap(HashMap shareParamsMap) { this.shareParamsMap = shareParamsMap; } public final void setSilent(boolean silent) { this.silent = silent; } public final void setCustomerLogos(ArrayList customerLogos) { this.customerLogos = customerLogos; } public final void setHiddenPlatforms(HashMap hiddenPlatforms) { this.hiddenPlatforms = hiddenPlatforms; } public final void setPlatformActionListener(PlatformActionListener callback) { this.callback = callback == null ? this : callback; } public final void setShareContentCustomizeCallback(ShareContentCustomizeCallback customizeCallback) { this.customizeCallback = customizeCallback; } public final void disableSSO() { disableSSO = true; } public final void show(Context context) { this.context = context; // 显示方式是由platform和silent两个字段控制的 // 如果platform设置了,则无须显示九宫格,否则都会显示; // 如果silent为true,表示不进入编辑页面,否则会进入。 if (shareParamsMap.containsKey("platform")) { String name = String.valueOf(shareParamsMap.get("platform")); Platform platform = ShareSDK.getPlatform(name); boolean isCustomPlatform = platform instanceof CustomPlatform; boolean isUseClientToShare = isUseClientToShare(platform); if (silent || isCustomPlatform || isUseClientToShare) { shareSilently(platform); } else { prepareForEditPage(platform); } } else { showPlatformPage(context); } } /** 判断指定平台是否只能使用客户端分享 */ final boolean isUseClientToShare(Platform platform) { String name = platform.getName(); if ("Wechat".equals(name) || "WechatMoments".equals(name) || "WechatFavorite".equals(name) || "ShortMessage".equals(name) || "Email".equals(name) || "Qzone".equals(name) || "QQ".equals(name) || "Pinterest".equals(name) || "Instagram".equals(name) || "Yixin".equals(name) || "YixinMoments".equals(name) || "QZone".equals(name) || "Mingdao".equals(name) || "Line".equals(name) || "KakaoStory".equals(name) || "KakaoTalk".equals(name) || "Bluetooth".equals(name) || "WhatsApp".equals(name) || "BaiduTieba".equals(name) || "Laiwang".equals(name) || "LaiwangMoments".equals(name) || "Alipay".equals(name) || "AlipayMoments".equals(name) || "FacebookMessenger".equals(name) || "GooglePlus".equals(name) || "Dingding".equals(name) || "Youtube".equals(name) || "Meipai".equals(name) ) { return true; } else if ("Evernote".equals(name)) { if ("true".equals(platform.getDevinfo("ShareByAppClient"))) { return true; } } else if ("SinaWeibo".equals(name)) { if ("true".equals(platform.getDevinfo("ShareByAppClient"))) { Intent test = new Intent(Intent.ACTION_SEND); test.setPackage("com.sina.weibo"); test.setType("image/*"); ResolveInfo ri = platform.getContext().getPackageManager().resolveActivity(test, 0); if(ri == null) { test = new Intent(Intent.ACTION_SEND); test.setPackage("com.sina.weibog3"); test.setType("image/*"); ri = platform.getContext().getPackageManager().resolveActivity(test, 0); } return (ri != null); } } return false; } final void shareSilently(Platform platform) { if (formateShareData(platform)) { ShareParams sp = shareDataToShareParams(platform); if (sp != null) { toast("ssdk_oks_sharing"); if (customizeCallback != null) { customizeCallback.onShare(platform, sp); } if (disableSSO) { platform.SSOSetting(disableSSO); } platform.setPlatformActionListener(callback); platform.share(sp); } } } private void prepareForEditPage(Platform platform) { if (formateShareData(platform)) { ShareParams sp = shareDataToShareParams(platform); if (sp != null) { // 编辑分享内容的统计 ShareSDK.logDemoEvent(3, null); if (customizeCallback != null) { customizeCallback.onShare(platform, sp); } showEditPage(context, platform, sp); } } } final boolean formateShareData(Platform plat) { String name = plat.getName(); boolean isAlipay = "Alipay".equals(name) || "AlipayMoments".equals(name); if (isAlipay && !plat.isClientValid()) { toast("ssdk_alipay_client_inavailable"); return false; } boolean isKakaoTalk = "KakaoTalk".equals(name); if (isKakaoTalk && !plat.isClientValid()) { toast("ssdk_kakaotalk_client_inavailable"); return false; } boolean isKakaoStory = "KakaoStory".equals(name); if (isKakaoStory && !plat.isClientValid()) { toast("ssdk_kakaostory_client_inavailable"); return false; } boolean isLine = "Line".equals(name); if (isLine && !plat.isClientValid()) { toast("ssdk_line_client_inavailable"); return false; } boolean isWhatsApp = "WhatsApp".equals(name); if (isWhatsApp && !plat.isClientValid()) { toast("ssdk_whatsapp_client_inavailable"); return false; } boolean isPinterest = "Pinterest".equals(name); if (isPinterest && !plat.isClientValid()) { toast("ssdk_pinterest_client_inavailable"); return false; } if ("Instagram".equals(name) && !plat.isClientValid()) { toast("ssdk_instagram_client_inavailable"); return false; } if ("QZone".equals(name) && !plat.isClientValid()) { toast("ssdk_qq_client_inavailable"); return false; } boolean isLaiwang = "Laiwang".equals(name); boolean isLaiwangMoments = "LaiwangMoments".equals(name); if(isLaiwang || isLaiwangMoments){ if (!plat.isClientValid()) { toast("ssdk_laiwang_client_inavailable"); return false; } } boolean isYixin = "YixinMoments".equals(name) || "Yixin".equals(name); if (isYixin && !plat.isClientValid()) { toast("ssdk_yixin_client_inavailable"); return false; } boolean isWechat = "WechatFavorite".equals(name) || "Wechat".equals(name) || "WechatMoments".equals(name); if (isWechat && !plat.isClientValid()) { toast("ssdk_wechat_client_inavailable"); return false; } if ("FacebookMessenger".equals(name) && !plat.isClientValid()) { toast("ssdk_facebookmessenger_client_inavailable"); return false; } if (!shareParamsMap.containsKey("shareType")) { int shareType = Platform.SHARE_TEXT; String imagePath = String.valueOf(shareParamsMap.get("imagePath")); if (imagePath != null && (new File(imagePath)).exists()) { shareType = Platform.SHARE_IMAGE; if (imagePath.endsWith(".gif") && isWechat) { shareType = Platform.SHARE_EMOJI; } else if (shareParamsMap.containsKey("url") && !TextUtils.isEmpty(shareParamsMap.get("url").toString())) { shareType = Platform.SHARE_WEBPAGE; if (shareParamsMap.containsKey("musicUrl") && !TextUtils.isEmpty(shareParamsMap.get("musicUrl").toString()) && isWechat) { shareType = Platform.SHARE_MUSIC; } } } else { Bitmap viewToShare = ResHelper.forceCast(shareParamsMap.get("viewToShare")); if (viewToShare != null && !viewToShare.isRecycled()) { shareType = Platform.SHARE_IMAGE; if (shareParamsMap.containsKey("url") && !TextUtils.isEmpty(shareParamsMap.get("url").toString())) { shareType = Platform.SHARE_WEBPAGE; if (shareParamsMap.containsKey("musicUrl") && !TextUtils.isEmpty(shareParamsMap.get("musicUrl").toString()) && isWechat) { shareType = Platform.SHARE_MUSIC; } } } else { Object imageUrl = shareParamsMap.get("imageUrl"); if (imageUrl != null && !TextUtils.isEmpty(String.valueOf(imageUrl))) { shareType = Platform.SHARE_IMAGE; if (String.valueOf(imageUrl).endsWith(".gif") && isWechat) { shareType = Platform.SHARE_EMOJI; } else if (shareParamsMap.containsKey("url") && !TextUtils.isEmpty(shareParamsMap.get("url").toString())) { shareType = Platform.SHARE_WEBPAGE; if (shareParamsMap.containsKey("musicUrl") && !TextUtils.isEmpty(shareParamsMap.get("musicUrl").toString()) && isWechat) { shareType = Platform.SHARE_MUSIC; } } } } } shareParamsMap.put("shareType", shareType); } return true; } final ShareParams shareDataToShareParams(Platform plat) { if (plat == null || shareParamsMap == null) { toast("ssdk_oks_share_failed"); return null; } try { String imagePath = ResHelper.forceCast(shareParamsMap.get("imagePath")); Bitmap viewToShare = ResHelper.forceCast(shareParamsMap.get("viewToShare")); if (TextUtils.isEmpty(imagePath) && viewToShare != null && !viewToShare.isRecycled()) { String path = ResHelper.getCachePath(plat.getContext(), "screenshot"); File ss = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); FileOutputStream fos = new FileOutputStream(ss); viewToShare.compress(CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); shareParamsMap.put("imagePath", ss.getAbsolutePath()); } } catch (Throwable t) { t.printStackTrace(); toast("ssdk_oks_share_failed"); return null; } return new ShareParams(shareParamsMap); } private void toast(final String resOrName) { UIHandler.sendEmptyMessage(0, new Callback() { public boolean handleMessage(Message msg) { int resId = ResHelper.getStringRes(context, resOrName); if (resId > 0) { Toast.makeText(context, resId, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, resOrName, Toast.LENGTH_SHORT).show(); } return false; } }); } protected abstract void showPlatformPage(Context context); protected abstract void showEditPage(Context context, Platform platform, ShareParams sp); public final void onComplete(Platform platform, int action, HashMap res) { Message msg = new Message(); msg.arg1 = 1; msg.arg2 = action; msg.obj = platform; UIHandler.sendMessage(msg, this); } public final void onError(Platform platform, int action, Throwable t) { t.printStackTrace(); Message msg = new Message(); msg.arg1 = 2; msg.arg2 = action; msg.obj = t; UIHandler.sendMessage(msg, this); // 分享失败的统计 ShareSDK.logDemoEvent(4, platform); } public final void onCancel(Platform platform, int action) { Message msg = new Message(); msg.arg1 = 3; msg.arg2 = action; msg.obj = platform; UIHandler.sendMessage(msg, this); // 分享失败的统计 ShareSDK.logDemoEvent(5, platform); } public final boolean handleMessage(Message msg) { switch (msg.arg1) { case 1: { // 成功 int resId = ResHelper.getStringRes(context, "ssdk_oks_share_completed"); if (resId > 0) { toast(context.getString(resId)); } } break; case 2: { // 失败 String expName = msg.obj.getClass().getSimpleName(); if ("WechatClientNotExistException".equals(expName) || "WechatTimelineNotSupportedException".equals(expName) || "WechatFavoriteNotSupportedException".equals(expName)) { toast("ssdk_wechat_client_inavailable"); } else if ("GooglePlusClientNotExistException".equals(expName)) { toast("ssdk_google_plus_client_inavailable"); } else if ("QQClientNotExistException".equals(expName)) { toast("ssdk_qq_client_inavailable"); } else if ("YixinClientNotExistException".equals(expName) || "YixinTimelineNotSupportedException".equals(expName)) { toast("ssdk_yixin_client_inavailable"); } else if ("KakaoTalkClientNotExistException".equals(expName)) { toast("ssdk_kakaotalk_client_inavailable"); } else if ("KakaoStoryClientNotExistException".equals(expName)) { toast("ssdk_kakaostory_client_inavailable"); } else if("WhatsAppClientNotExistException".equals(expName)){ toast("ssdk_whatsapp_client_inavailable"); } else if("FacebookMessengerClientNotExistException".equals(expName)){ toast("ssdk_facebookmessenger_client_inavailable"); } else { toast("ssdk_oks_share_failed"); } } break; case 3: { // 取消 toast("ssdk_oks_share_canceled"); } break; } return false; } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/ShareContentCustomizeCallback.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.Platform.ShareParams; /** 自定义不同平台分享不同内容的接口 */ public interface ShareContentCustomizeCallback { public void onShare(Platform platform, ShareParams paramsToShare); } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/ClassicTheme.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.content.res.Configuration; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.Platform.ShareParams; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.land.EditPageLand; import cn.sharesdk.onekeyshare.themes.classic.land.PlatformPageLand; import cn.sharesdk.onekeyshare.themes.classic.port.EditPagePort; import cn.sharesdk.onekeyshare.themes.classic.port.PlatformPagePort; /** 九宫格经典主题样式的实现类*/ public class ClassicTheme extends OnekeyShareThemeImpl { /** 展示平台列表*/ protected void showPlatformPage(Context context) { PlatformPage page; int orientation = context.getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { page = new PlatformPagePort(this); } else { page = new PlatformPageLand(this); } page.show(context, null); } /** 展示编辑界面*/ protected void showEditPage(Context context, Platform platform, ShareParams sp) { EditPage page; int orientation = context.getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { page = new EditPagePort(this); } else { page = new EditPageLand(this); } page.setPlatform(platform); page.setShareParams(sp); page.show(context, null); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/EditPage.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.app.Activity; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import com.mob.tools.gui.AsyncImageView; import com.mob.tools.utils.DeviceHelper; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.Platform.ShareParams; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.onekeyshare.OnekeySharePage; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.land.FriendListPageLand; import cn.sharesdk.onekeyshare.themes.classic.port.FriendListPagePort; public class EditPage extends OnekeySharePage implements OnClickListener, TextWatcher, Runnable { private OnekeyShareThemeImpl impl; protected Platform platform; protected ShareParams sp; protected LinearLayout llPage; protected RelativeLayout rlTitle; protected ScrollView svContent; protected EditText etContent; protected TextView tvCancel; protected TextView tvShare; protected RelativeLayout rlThumb; /** 异步加载图片的控件 */ protected AsyncImageView aivThumb; protected XView xvRemove; protected LinearLayout llBottom; protected TextView tvAt; protected TextView tvTextCouter; protected Bitmap thumb; protected int maxBodyHeight; public EditPage(OnekeyShareThemeImpl impl) { super(impl); this.impl = impl; } public void setPlatform(Platform platform) { this.platform = platform; } public void setShareParams(ShareParams sp) { this.sp = sp; } public void setActivity(Activity activity) { super.setActivity(activity); if (isDialogMode()) { // activity.setTheme(android.R.style.Theme_Dialog); // activity.requestWindowFeature(Window.FEATURE_NO_TITLE); // if (Build.VERSION.SDK_INT >= 11) { // try { // ReflectHelper.invokeInstanceMethod(activity, "setFinishOnTouchOutside", false); // } catch (Throwable e) {} // } } activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); } public void onCreate() { activity.getWindow().setBackgroundDrawable(new ColorDrawable(0xfff3f3f3)); } /** 取消分享时,执行的方法 */ private void cancelAndFinish() { // 分享失败的统计 ShareSDK.logDemoEvent(5, platform); finish(); } /** 执行分享时的方法 */ private void shareAndFinish() { int resId = ResHelper.getStringRes(activity, "ssdk_oks_sharing"); if (resId > 0) { Toast.makeText(activity, resId, Toast.LENGTH_SHORT).show(); } if (isDisableSSO()) { platform.SSOSetting(true); } platform.setPlatformActionListener(getCallback()); platform.share(sp); finish(); } /** 编辑界面,显示的图片 */ private void showThumb(Bitmap pic) { PicViewerPage page = new PicViewerPage(impl); page.setImageBitmap(pic); page.show(activity, null); } private void removeThumb() { sp.setImageArray(null); sp.setImageData(null); sp.setImagePath(null); sp.setImageUrl(null); } /** @ 好友时,展示的好友列表 */ private void showFriendList() { FriendListPage page; int orientation = activity.getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { page = new FriendListPagePort(impl); } else { page = new FriendListPageLand(impl); } page.setPlatform(platform); page.showForResult(platform.getContext(), null, this); } public void onResult(HashMap data) { String atText = getJoinSelectedUser(data); if(!TextUtils.isEmpty(atText)) { etContent.append(atText); } } private String getJoinSelectedUser(HashMap data) { if (data != null && data.containsKey("selected")) { @SuppressWarnings("unchecked") ArrayList selected = (ArrayList) data.get("selected"); String platform = ((Platform)data.get("platform")).getName(); if("FacebookMessenger".equals(platform)) { return null; } StringBuilder sb = new StringBuilder(); for (String sel : selected) { sb.append('@').append(sel).append(' '); } return sb.toString(); } return null; } protected boolean isShowAtUserLayout(String platformName) { return "SinaWeibo".equals(platformName) || "TencentWeibo".equals(platformName) || "Facebook".equals(platformName) || "Twitter".equals(platformName); } public void onClick(View v) { if (v.equals(tvCancel)) { cancelAndFinish(); } else if (v.equals(tvShare)) { sp.setText(etContent.getText().toString().trim()); shareAndFinish(); } else if (v.equals(aivThumb)) { showThumb(thumb); } else if (v.equals(xvRemove)) { maxBodyHeight = 0; rlThumb.setVisibility(View.GONE); llPage.measure(0, 0); onTextChanged(etContent.getText(), 0, 0, 0); removeThumb(); } else if (v.equals(tvAt)) { showFriendList(); } } public void onTextChanged(CharSequence s, int start, int before, int count) { tvTextCouter.setText(String.valueOf(s.length())); if (maxBodyHeight == 0) { maxBodyHeight = llPage.getHeight() - rlTitle.getHeight() - llBottom.getHeight(); } if (maxBodyHeight > 0) { svContent.post(this); } } /** 动态适配编辑界面的高度 */ public void run() { int height = svContent.getChildAt(0).getHeight(); RelativeLayout.LayoutParams lp = ResHelper.forceCast(svContent.getLayoutParams()); if (height > maxBodyHeight && lp.height != maxBodyHeight) { lp.height = maxBodyHeight; svContent.setLayoutParams(lp); } else if (height < maxBodyHeight && lp.height == maxBodyHeight) { lp.height = LayoutParams.WRAP_CONTENT; svContent.setLayoutParams(lp); } } public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onPause() { DeviceHelper.getInstance(activity).hideSoftInput(getContentView()); super.onPause(); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/FriendAdapter.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.graphics.drawable.ColorDrawable; import android.os.Handler.Callback; import android.os.Message; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView.OnItemClickListener; import android.widget.LinearLayout; import com.mob.tools.gui.PullToRequestListAdapter; import com.mob.tools.gui.PullToRequestView; import com.mob.tools.utils.UIHandler; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; /** 好友列表的适配器 */ public class FriendAdapter extends PullToRequestListAdapter implements PlatformActionListener { private FriendListPage activity; private boolean hasNext; private Platform platform; /** 请求好友列表时,每页15个 */ private final int pageCount = 15; /** 当前的好友列表是第几页 */ private int curPage; /** 好友列表数据 */ private ArrayList follows; /** 判断当前的好友列表数据与请求的新数据是否有重复 */ private HashMap map; /** 好友列表的头部View */ private PRTHeader llHeader; /** 根据设计,按照比例来布局,以此来适配所有手机 */ private float ratio; public FriendAdapter(FriendListPage activity, PullToRequestView view) { super(view); this.activity = activity; curPage = -1; hasNext = true; map = new HashMap(); follows = new ArrayList(); getListView().setDivider(new ColorDrawable(0xffeaeaea)); } public void setRatio(float ratio) { this.ratio = ratio; getListView().setDividerHeight((int) (ratio < 1 ? 1 : ratio)); } public void setOnItemClickListener(OnItemClickListener listener) { getListView().setOnItemClickListener(listener); } public void setPlatform(Platform platform) { this.platform = platform; platform.setPlatformActionListener(this); } private void next() { if (hasNext) { platform.listFriend(pageCount, curPage + 1, null); } } public void onComplete(Platform plat, int action, HashMap res) { final FollowersResult followersResult = parseFollowers(platform.getName(), res, map); if (followersResult == null) { UIHandler.sendEmptyMessage(0, new Callback() { public boolean handleMessage(Message msg) { notifyDataSetChanged(); return false; } }); return; } hasNext = followersResult.hasNextPage; if (followersResult.list != null && followersResult.list.size() > 0) { curPage++; Message msg = new Message(); msg.what = 1; msg.obj = followersResult.list; UIHandler.sendMessage(msg, new Callback() { public boolean handleMessage(Message msg) { if (curPage <= 0) { follows.clear(); } follows.addAll(followersResult.list); notifyDataSetChanged(); return false; } }); } } private FollowersResult parseFollowers(String platform, HashMap res, HashMap uidMap) { if (res == null || res.size() <= 0) { return null; } boolean hasNext = false; ArrayList data = new ArrayList(); if ("SinaWeibo".equals(platform)) { // users[id, name, description] @SuppressWarnings("unchecked") ArrayList> users = (ArrayList>) res.get("users"); for (HashMap user : users) { String uid = String.valueOf(user.get("id")); if (!uidMap.containsKey(uid)) { Following following = new Following(); following.uid = uid; following.screenName = String.valueOf(user.get("name")); following.description = String.valueOf(user.get("description")); following.icon = String.valueOf(user.get("profile_image_url")); following.atName = following.screenName; uidMap.put(following.uid, true); data.add(following); } } hasNext = (Integer) res.get("total_number") > uidMap.size(); } else if ("TencentWeibo".equals(platform)) { hasNext = ((Integer)res.get("hasnext") == 0); // info[nick, name, tweet[text]] @SuppressWarnings("unchecked") ArrayList> infos = (ArrayList>) res.get("info"); for (HashMap info : infos) { String uid = String.valueOf(info.get("name")); if (!uidMap.containsKey(uid)) { Following following = new Following(); following.screenName = String.valueOf(info.get("nick")); following.uid = uid; following.atName = uid; @SuppressWarnings("unchecked") ArrayList> tweets = (ArrayList>) info.get("tweet"); for (HashMap tweet : tweets) { following.description = String.valueOf(tweet.get("text")); break; } following.icon = String.valueOf(info.get("head")) + "/100"; uidMap.put(following.uid, true); data.add(following); } } } else if ("Facebook".equals(platform)) { // data[id, name] @SuppressWarnings("unchecked") ArrayList> datas = (ArrayList>) res.get("data"); for (HashMap d : datas) { String uid = String.valueOf(d.get("id")); if (!uidMap.containsKey(uid)) { Following following = new Following(); following.uid = uid; following.atName = "[" + uid + "]"; following.screenName = String.valueOf(d.get("name")); @SuppressWarnings("unchecked") HashMap picture = (HashMap) d.get("picture"); if (picture != null) { @SuppressWarnings("unchecked") HashMap pData = (HashMap) picture.get("data"); following.icon = String.valueOf(pData.get("url")); } uidMap.put(following.uid, true); data.add(following); } } @SuppressWarnings("unchecked") HashMap paging = (HashMap) res.get("paging"); hasNext = paging.containsKey("next"); } else if ("Twitter".equals(platform)) { // users[screen_name, name, description] @SuppressWarnings("unchecked") ArrayList> users = (ArrayList>) res.get("users"); for (HashMap user : users) { String uid = String.valueOf(user.get("screen_name")); if (!uidMap.containsKey(uid)) { Following following = new Following(); following.uid = uid; following.atName = uid; following.screenName = String.valueOf(user.get("name")); following.description = String.valueOf(user.get("description")); following.icon = String.valueOf(user.get("profile_image_url")); uidMap.put(following.uid, true); data.add(following); } } } FollowersResult ret = new FollowersResult(); ret.list = data; ret.hasNextPage = hasNext; return ret; } public void onError(Platform plat, int action, Throwable t) { t.printStackTrace(); } public void onCancel(Platform plat, int action) { UIHandler.sendEmptyMessage(0, new Callback() { public boolean handleMessage(Message msg) { activity.finish(); return false; } }); } public Following getItem(int position) { return follows.get(position); } public long getItemId(int position) { return position; } public int getCount() { return follows == null ? 0 : follows.size(); } public View getHeaderView() { if (llHeader == null) { llHeader = new PRTHeader(getContext()); } return llHeader; } public void onPullDown(int percent) { llHeader.onPullDown(percent); } public void onRefresh() { llHeader.onRequest(); curPage = -1; hasNext = true; map.clear(); next(); } public void onReversed() { llHeader.reverse(); } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { FriendListItem llItem = new FriendListItem(parent.getContext(), ratio); convertView = llItem; } FriendListItem llItem = (FriendListItem) convertView; llItem.update(getItem(position), isFling()); if (position == getCount() - 1) { next(); } return convertView; } public static class Following { public boolean checked; public String screenName; public String description; public String uid; public String icon; //@Name 用于微博等提示或关联某个人 public String atName; } private static class FollowersResult { public ArrayList list; public boolean hasNextPage = false; } public View getFooterView() { LinearLayout footerView = new LinearLayout(getContext()); footerView.setMinimumHeight(10); return footerView; } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/FriendListItem.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.TypedValue; import android.view.Gravity; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.mob.tools.gui.AsyncImageView; import com.mob.tools.gui.BitmapProcessor; import com.mob.tools.utils.ResHelper; import cn.sharesdk.onekeyshare.themes.classic.FriendAdapter.Following; /** 好友列表的item */ public class FriendListItem extends LinearLayout { private static final int DESIGN_AVATAR_WIDTH = 64; private static final int DESIGN_AVATAR_PADDING = 24; private static final int DESIGN_ITEM_HEIGHT = 96; private static final int DESIGN_ITEM_PADDING = 20; private ImageView ivCheck; private AsyncImageView aivIcon; private TextView tvName; /** 好友列表中,被选中的checkbox图标 */ private Bitmap bmChd; /** 好友列表中,没选中的checkbox图标 */ private Bitmap bmUnch; public FriendListItem(Context context, float ratio) { super(context); int itemPadding = (int) (ratio * DESIGN_ITEM_PADDING); setPadding(itemPadding, 0, itemPadding, 0); setMinimumHeight((int) (ratio * DESIGN_ITEM_HEIGHT)); setBackgroundColor(0xffffffff); ivCheck = new ImageView(context); LayoutParams lp = new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_VERTICAL; addView(ivCheck, lp); aivIcon = new AsyncImageView(context); int avatarWidth = (int) (ratio * DESIGN_AVATAR_WIDTH); lp = new LayoutParams(avatarWidth, avatarWidth); lp.gravity = Gravity.CENTER_VERTICAL; int avatarMargin = (int) (ratio * DESIGN_AVATAR_PADDING); lp.setMargins(avatarMargin, 0, avatarMargin, 0); addView(aivIcon, lp); tvName = new TextView(context); tvName.setTextColor(0xff000000); tvName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvName.setSingleLine(); lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_VERTICAL; lp.weight = 1; addView(tvName, lp); int resId = ResHelper.getBitmapRes(context, "ssdk_oks_classic_check_checked"); if (resId > 0) { bmChd = BitmapFactory.decodeResource(context.getResources(), resId); } resId = ResHelper.getBitmapRes(getContext(), "ssdk_oks_classic_check_default"); if (resId > 0) { bmUnch = BitmapFactory.decodeResource(context.getResources(), resId); } } public void update(Following following, boolean fling) { tvName.setText(following.screenName); ivCheck.setImageBitmap(following.checked ? bmChd : bmUnch); if (aivIcon != null) { if (fling) { Bitmap bm = BitmapProcessor.getBitmapFromCache(following.icon); if (bm != null && !bm.isRecycled()) { aivIcon.setImageBitmap(bm); } else { aivIcon.execute(null, 0); } } else { aivIcon.execute(following.icon, 0); } } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/FriendListPage.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.graphics.drawable.ColorDrawable; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.mob.tools.gui.PullToRequestView; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.onekeyshare.OnekeySharePage; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.FriendAdapter.Following; /** 编辑界面,@好友时,弹出的好友列表 */ public abstract class FriendListPage extends OnekeySharePage implements OnClickListener, OnItemClickListener { private static final int DESIGN_LEFT_PADDING = 40; private Platform platform; private LinearLayout llPage; private RelativeLayout rlTitle; private TextView tvCancel; private TextView tvConfirm; private FriendAdapter adapter; private int lastPosition = -1; /** 展示好友列表时,已选择要‘@’的好友个数 */ private int checkNum = 0; public FriendListPage(OnekeyShareThemeImpl impl) { super(impl); } public void setPlatform(Platform platform) { this.platform = platform; } public void onCreate() { activity.getWindow().setBackgroundDrawable(new ColorDrawable(0xfff3f3f3)); llPage = new LinearLayout(activity); llPage.setOrientation(LinearLayout.VERTICAL); activity.setContentView(llPage); rlTitle = new RelativeLayout(activity); float ratio = getRatio(); int titleHeight = (int) (getDesignTitleHeight() * ratio); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, titleHeight); llPage.addView(rlTitle, lp); initTitle(rlTitle, ratio); View line = new View(activity); LinearLayout.LayoutParams lpline = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, (int) (ratio < 1 ? 1 : ratio)); line.setBackgroundColor(0xffdad9d9); llPage.addView(line, lpline); FrameLayout flPage = new FrameLayout(getContext()); LinearLayout.LayoutParams lpFl = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lpFl.weight = 1; flPage.setLayoutParams(lpFl); llPage.addView(flPage); // 关注(或朋友)列表 PullToRequestView followList = new PullToRequestView(getContext()); FrameLayout.LayoutParams lpLv = new FrameLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); followList.setLayoutParams(lpLv); flPage.addView(followList); adapter = new FriendAdapter(this, followList); adapter.setPlatform(platform); adapter.setRatio(ratio); adapter.setOnItemClickListener(this); followList.setAdapter(adapter); // 请求数据 followList.performPullingDown(true); } protected abstract float getRatio(); protected abstract int getDesignTitleHeight(); private void initTitle(RelativeLayout rlTitle, float ratio) { tvCancel = new TextView(activity); tvCancel.setTextColor(0xff3b3b3b); tvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvCancel.setGravity(Gravity.CENTER); int resId = ResHelper.getStringRes(activity, "ssdk_oks_cancel"); if (resId > 0) { tvCancel.setText(resId); } int padding = (int) (DESIGN_LEFT_PADDING * ratio); tvCancel.setPadding(padding, 0, padding, 0); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); rlTitle.addView(tvCancel, lp); tvCancel.setOnClickListener(this); TextView tvTitle = new TextView(activity); tvTitle.setTextColor(0xff3b3b3b); tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); tvTitle.setGravity(Gravity.CENTER); resId = ResHelper.getStringRes(activity, "ssdk_oks_contacts"); if (resId > 0) { tvTitle.setText(resId); } lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.CENTER_IN_PARENT); rlTitle.addView(tvTitle, lp); tvConfirm = new TextView(activity); tvConfirm.setTextColor(0xffff6d11); tvConfirm.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvConfirm.setGravity(Gravity.CENTER); resId = ResHelper.getStringRes(activity, "ssdk_oks_confirm"); if (resId > 0) { tvConfirm.setText(resId); } tvConfirm.setPadding(padding, 0, padding, 0); lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); rlTitle.addView(tvConfirm, lp); tvConfirm.setOnClickListener(this); } public void onClick(View v) { if (v.equals(tvCancel)) { finish(); } else { ArrayList selected = new ArrayList(); for (int i = 0, size = adapter.getCount(); i < size; i++) { if (adapter.getItem(i).checked) { selected.add(adapter.getItem(i).atName); } } HashMap res = new HashMap(); res.put("selected", selected); res.put("platform", platform); setResult(res); finish(); } } public void onItemClick(AdapterView parent, View view, int position, long id) { if ("FacebookMessenger".equals(platform.getName())) { if(lastPosition >= 0) { Following lastFollwing = adapter.getItem(lastPosition); lastFollwing.checked = false; } lastPosition = position; } Following following = adapter.getItem(position); following.checked = !following.checked; if(following.checked) { checkNum++; } else { checkNum--; } updateConfirmView(); adapter.notifyDataSetChanged(); } private void updateConfirmView() { int resId = ResHelper.getStringRes(activity, "ssdk_oks_confirm"); String confirm = "Confirm"; if(resId > 0) { confirm = getContext().getResources().getString(resId); } if(checkNum == 0) { tvConfirm.setText(confirm); } else if(checkNum > 0) { tvConfirm.setText(confirm + "(" + checkNum + ")"); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/IndicatorView.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.view.View; /** 九宫格滑动时,下面显示的圆圈 */ public class IndicatorView extends View { private static final int DESIGN_INDICATOR_RADIUS = 6; private static final int DESIGN_INDICATOR_DISTANCE = 14; private static final int DESIGN_BOTTOM_HEIGHT = 52; /** 九格宫有多少页数 */ private int count; /** 当前显示的是九格宫中的第几页 */ private int current; public IndicatorView(Context context) { super(context); } public void setScreenCount(int count) { this.count = count; } public void onScreenChange(int currentScreen, int lastScreen) { if (currentScreen != current) { current = currentScreen; postInvalidate(); } } protected void onDraw(Canvas canvas) { if (count <= 1) { this.setVisibility(View.GONE); return; } float height = getHeight(); float radius = height * DESIGN_INDICATOR_RADIUS / DESIGN_BOTTOM_HEIGHT; float distance = height * DESIGN_INDICATOR_DISTANCE / DESIGN_BOTTOM_HEIGHT; float windowWidth = radius * 2 * count + distance * (count - 1); float left = (getWidth() - windowWidth) / 2; float cy = height / 2; canvas.drawColor(0xffffffff); Paint paint = new Paint(); paint.setAntiAlias(true); for (int i = 0; i < count; i++) { if (i == current) { paint.setColor(0xff5d71a0); } else { paint.setColor(0xffafb1b7); } float cx = left + (radius * 2 + distance) * i; canvas.drawCircle(cx, cy, radius, paint); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PRTHeader.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.mob.tools.utils.ResHelper; /** 下拉刷新的头部控件 */ public class PRTHeader extends LinearLayout { private static final int DESIGN_SCREEN_WIDTH = 720; private static final int DESIGN_AVATAR_WIDTH = 64; private static final int DESIGN_AVATAR_PADDING = 24; private TextView tvHeader; private RotateImageView ivArrow; private ProgressBar pbRefreshing; public PRTHeader(Context context) { super(context); int[] size = ResHelper.getScreenSize(context); float screenWidth = size[0] < size[1] ? size[0] : size[1]; float ratio = screenWidth / DESIGN_SCREEN_WIDTH; setOrientation(VERTICAL); LinearLayout llInner = new LinearLayout(context); LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_HORIZONTAL; addView(llInner, lp); ivArrow = new RotateImageView(context); int resId = ResHelper.getBitmapRes(context, "ssdk_oks_ptr_ptr"); if (resId > 0) { ivArrow.setImageResource(resId); } int avatarWidth = (int) (ratio * DESIGN_AVATAR_WIDTH); lp = new LayoutParams(avatarWidth, avatarWidth); lp.gravity = Gravity.CENTER_VERTICAL; int avataPadding = (int) (ratio * DESIGN_AVATAR_PADDING); lp.topMargin = lp.bottomMargin = avataPadding; llInner.addView(ivArrow, lp); pbRefreshing = new ProgressBar(context); resId = ResHelper.getBitmapRes(context, "ssdk_oks_classic_progressbar"); Drawable pbdrawable = context.getResources().getDrawable(resId); pbRefreshing.setIndeterminateDrawable(pbdrawable); llInner.addView(pbRefreshing, lp); pbRefreshing.setVisibility(View.GONE); tvHeader = new TextView(getContext()); tvHeader.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvHeader.setPadding(avataPadding, 0, avataPadding, 0); tvHeader.setTextColor(0xff09bb07); lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_VERTICAL; llInner.addView(tvHeader, lp); } public void onPullDown(int percent) { if (percent > 100) { int degree = (percent - 100) * 180 / 20; if (degree > 180) { degree = 180; } if (degree < 0) { degree = 0; } ivArrow.setRotation(degree); } else { ivArrow.setRotation(0); } if (percent < 100) { int resId = ResHelper.getStringRes(getContext(), "ssdk_oks_pull_to_refresh"); if (resId > 0) { tvHeader.setText(resId); } } else { int resId = ResHelper.getStringRes(getContext(), "ssdk_oks_release_to_refresh"); if (resId > 0) { tvHeader.setText(resId); } } } public void onRequest() { ivArrow.setVisibility(View.GONE); pbRefreshing.setVisibility(View.VISIBLE); int resId = ResHelper.getStringRes(getContext(), "ssdk_oks_refreshing"); if (resId > 0) { tvHeader.setText(resId); } } public void reverse() { pbRefreshing.setVisibility(View.GONE); ivArrow.setRotation(180); ivArrow.setVisibility(View.VISIBLE); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PicViewerPage.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.ImageView.ScaleType; import com.mob.tools.gui.ScaledImageView; import cn.sharesdk.onekeyshare.OnekeySharePage; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; /** 图片浏览的视图类 */ public class PicViewerPage extends OnekeySharePage implements OnGlobalLayoutListener { private Bitmap pic; /** 图片浏览的缩放控件 */ private ScaledImageView sivViewer; public PicViewerPage(OnekeyShareThemeImpl impl) { super(impl); } /** 设置图片用于浏览 */ public void setImageBitmap(Bitmap pic) { this.pic = pic; } public void onCreate() { activity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000)); sivViewer = new ScaledImageView(activity); sivViewer.setScaleType(ScaleType.MATRIX); activity.setContentView(sivViewer); if (pic != null) { sivViewer.getViewTreeObserver().addOnGlobalLayoutListener(this); } } public void onGlobalLayout() { sivViewer.getViewTreeObserver().removeGlobalOnLayoutListener(this); sivViewer.post(new Runnable() { public void run() { sivViewer.setBitmap(pic); } }); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PlatformPage.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.graphics.drawable.ColorDrawable; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.LinearLayout; import android.widget.TextView; import com.mob.tools.gui.MobViewPager; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import java.util.HashMap; import cn.sharesdk.framework.CustomPlatform; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.Platform.ShareParams; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.onekeyshare.CustomerLogo; import cn.sharesdk.onekeyshare.OnekeySharePage; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; /** 九宫格的抽象类 */ public abstract class PlatformPage extends OnekeySharePage { private ClassicTheme impl; /** 点击九格宫,展示编辑界面,要执行的子线程 */ private Runnable beforeFinish; /** 九宫格显示时的动画 */ private Animation animShow; /** 九宫格隐藏时的动画 */ private Animation animHide; private LinearLayout llPanel; private boolean finished; public PlatformPage(OnekeyShareThemeImpl impl) { super(impl); this.impl = ResHelper.forceCast(impl); } public void onCreate() { activity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000)); initAnims(); LinearLayout llPage = new LinearLayout(activity); llPage.setOrientation(LinearLayout.VERTICAL); activity.setContentView(llPage); TextView vTop = new TextView(activity); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lp.weight = 1; vTop.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); llPage.addView(vTop, lp); llPanel = new LinearLayout(activity); llPanel.setOrientation(LinearLayout.VERTICAL); lp = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); llPanel.setAnimation(animShow); llPage.addView(llPanel, lp); MobViewPager mvp = new MobViewPager(activity); ArrayList cells = collectCells(); PlatformPageAdapter adapter = newAdapter(cells); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getPanelHeight()); llPanel.addView(mvp, lp); IndicatorView vInd = new IndicatorView(activity); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getBottomHeight()); llPanel.addView(vInd, lp); vInd.setScreenCount(adapter.getCount()); vInd.onScreenChange(0, 0); adapter.setIndicator(vInd); mvp.setAdapter(adapter); } protected abstract PlatformPageAdapter newAdapter(ArrayList cells); protected ArrayList collectCells() { ArrayList cells = new ArrayList(); Platform[] platforms = ShareSDK.getPlatformList(); if (platforms == null) { platforms = new Platform[0]; } HashMap hides = getHiddenPlatforms(); if (hides == null) { hides = new HashMap(); } for (Platform p : platforms) { if (!hides.containsKey(p.getName())) { cells.add(p); } } ArrayList customers = getCustomerLogos(); if (customers != null && customers.size() > 0) { cells.addAll(customers); } return cells; } public final void showEditPage(final Platform platform) { beforeFinish = new Runnable() { public void run() { boolean isSilent = isSilent(); boolean isCustomPlatform = platform instanceof CustomPlatform; boolean isUseClientToShare = isUseClientToShare(platform); if (isSilent || isCustomPlatform || isUseClientToShare) { shareSilently(platform); } else { ShareParams sp = formateShareData(platform); if (sp != null) { // 编辑分享内容的统计 ShareSDK.logDemoEvent(3, null); if (getCustomizeCallback() != null) { getCustomizeCallback().onShare(platform, sp); } impl.showEditPage(activity, platform, sp); } } } }; finish(); } public final void performCustomLogoClick(final View v, final CustomerLogo logo) { beforeFinish = new Runnable() { public void run() { logo.listener.onClick(v); } }; finish(); } private void initAnims() { animShow = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0); animShow.setDuration(300); animHide = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1); animHide.setDuration(300); } public boolean onFinish() { if (finished) { finished = false; return false; } animHide.setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationEnd(Animation animation) { if (beforeFinish == null) { // 取消分享菜单的统计 ShareSDK.logDemoEvent(2, null); } else { beforeFinish.run(); beforeFinish = null; } finished = true; finish(); } }); llPanel.clearAnimation(); llPanel.setAnimation(animHide); llPanel.setVisibility(View.GONE); return true; } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PlatformPageAdapter.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.LinearLayout; import android.widget.TextView; import com.mob.tools.gui.ViewPagerAdapter; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import cn.sharesdk.framework.Platform; import cn.sharesdk.onekeyshare.CustomerLogo; /** 九宫格的适配器抽象类 */ public abstract class PlatformPageAdapter extends ViewPagerAdapter implements OnClickListener { /** 1秒内多次点击九格宫内的图标无效 */ protected static final int MIN_CLICK_INTERVAL = 1000; public static final int DESIGN_BOTTOM_HEIGHT = 52; /** 九格宫内图标排列的二维数组,一维对应平台,二维对应页数 */ protected Object[][] cells; private PlatformPage page; private IndicatorView vInd; protected int bottomHeight; protected int panelHeight; protected int cellHeight; protected int lineSize; protected int sepLineWidth; protected int paddingTop; protected int logoHeight; private long lastClickTime; public PlatformPageAdapter(PlatformPage page, ArrayList cells) { this.page = page; if (cells != null && !cells.isEmpty()) { calculateSize(page.getContext(), cells); collectCells(cells); } } /** 计算九宫格的格数,行数,格高,行高,图标大小 */ protected abstract void calculateSize(Context context, ArrayList plats); /** 计算九宫格的格数,行数 */ protected abstract void collectCells(ArrayList plats); public int getBottomHeight() { return bottomHeight; } public int getPanelHeight() { return panelHeight; } public int getCount() { return cells == null ? 0 : cells.length; } public void setIndicator(IndicatorView view) { vInd = view; } public void onScreenChange(int currentScreen, int lastScreen) { if (vInd != null) { vInd.setScreenCount(getCount()); vInd.onScreenChange(currentScreen, lastScreen); } } public View getView(int index, View convertView, ViewGroup parent) { if (convertView == null) { convertView = createPanel(parent.getContext()); } LinearLayout llPanel = ResHelper.forceCast(convertView); LinearLayout[] llCells = ResHelper.forceCast(llPanel.getTag()); refreshPanel(llCells, cells[index]); return convertView; } private View createPanel(Context context) { LinearLayout llPanel = new LinearLayout(context); llPanel.setOrientation(LinearLayout.VERTICAL); llPanel.setBackgroundColor(0xfff2f2f2); int lineCount = panelHeight / cellHeight; LinearLayout[] llCells = new LinearLayout[lineCount * lineSize]; llPanel.setTag(llCells); int cellBack = ResHelper.getBitmapRes(context, "ssdk_oks_classic_platform_cell_back"); LinearLayout.LayoutParams lp; for (int i = 0; i < lineCount; i++) { LinearLayout llLine = new LinearLayout(context); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, cellHeight); llPanel.addView(llLine, lp); for (int j = 0; j < lineSize; j++) { llCells[i * lineSize + j] = new LinearLayout(context); llCells[i * lineSize + j].setBackgroundResource(cellBack); llCells[i * lineSize + j].setOrientation(LinearLayout.VERTICAL); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, cellHeight); lp.weight = 1; llLine.addView(llCells[i * lineSize + j], lp); if (j < lineSize - 1) { View vSep = new View(context); lp = new LinearLayout.LayoutParams(sepLineWidth, LayoutParams.MATCH_PARENT); llLine.addView(vSep, lp); } } View vSep = new View(context); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, sepLineWidth); llPanel.addView(vSep, lp); } for (LinearLayout llCell : llCells) { ImageView ivLogo = new ImageView(context); ivLogo.setScaleType(ScaleType.CENTER_INSIDE); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, logoHeight); lp.topMargin = paddingTop; llCell.addView(ivLogo, lp); TextView tvName = new TextView(context); tvName.setTextColor(0xff646464); tvName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); tvName.setGravity(Gravity.CENTER); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lp.weight = 1; llCell.addView(tvName, lp); } return llPanel; } private void refreshPanel(LinearLayout[] llCells, Object[] logos) { int cellBack = ResHelper.getBitmapRes(page.getContext(), "ssdk_oks_classic_platform_cell_back"); int disableBack = ResHelper.getBitmapRes(page.getContext(), "ssdk_oks_classic_platfrom_cell_back_nor"); for (int i = 0; i < logos.length; i++) { ImageView ivLogo = ResHelper.forceCast(llCells[i].getChildAt(0)); TextView tvName = ResHelper.forceCast(llCells[i].getChildAt(1)); if (logos[i] == null) { ivLogo.setVisibility(View.INVISIBLE); tvName.setVisibility(View.INVISIBLE); llCells[i].setBackgroundResource(disableBack); llCells[i].setOnClickListener(null); } else { ivLogo.setVisibility(View.VISIBLE); tvName.setVisibility(View.VISIBLE); ivLogo.requestLayout(); tvName.requestLayout(); llCells[i].setBackgroundResource(cellBack); llCells[i].setOnClickListener(this); llCells[i].setTag(logos[i]); if (logos[i] instanceof CustomerLogo) { CustomerLogo logo = ResHelper.forceCast(logos[i]); if (logo.logo != null) { ivLogo.setImageBitmap(logo.logo); } else { ivLogo.setImageBitmap(null); } if (logo.label != null) { tvName.setText(logo.label); } else { tvName.setText(""); } } else { Platform plat = ResHelper.forceCast(logos[i]); String name = plat.getName().toLowerCase(); int resId = ResHelper.getBitmapRes(ivLogo.getContext(),"ssdk_oks_classic_" + name); if (resId > 0) { ivLogo.setImageResource(resId); } else { ivLogo.setImageBitmap(null); } resId = ResHelper.getStringRes(tvName.getContext(), "ssdk_" + name); if (resId > 0) { tvName.setText(resId); } else { tvName.setText(""); } } } } } public void onClick(View v) { long time = System.currentTimeMillis(); if (time - lastClickTime < MIN_CLICK_INTERVAL) { return; } lastClickTime = time; if (v.getTag() instanceof CustomerLogo) { CustomerLogo logo = ResHelper.forceCast(v.getTag()); page.performCustomLogoClick(v, logo); } else { Platform plat = ResHelper.forceCast(v.getTag()); page.showEditPage(plat); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/RotateImageView.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.graphics.Canvas; import android.widget.ImageView; /** 在At好友页面中,下拉刷新列表头部的旋转箭头 */ public class RotateImageView extends ImageView { private float rotation; public RotateImageView(Context context) { super(context); } public void setRotation(float rotation) { this.rotation = rotation; invalidate(); } protected void onDraw(Canvas canvas) { canvas.rotate(rotation, getWidth() / 2, getHeight() / 2); super.onDraw(canvas); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/XView.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.view.View; /** 编辑页面中删除图片“X”按钮 */ public class XView extends View { private float ratio; public XView(Context context) { super(context); } public void setRatio(float ratio) { this.ratio = ratio; } protected void onDraw(Canvas canvas) { int width = getWidth() / 2; int height = getHeight() / 2; Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(0xffa0a0a0); canvas.drawRect(width, 0, getWidth(), height, paint); paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(3f * ratio); paint.setColor(0xffffffff); float left = 8f * ratio; canvas.drawLine(width + left, left, getWidth() - left, width - left, paint); canvas.drawLine(width + left, width - left, getWidth() - left, left, paint); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/EditPageLand.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.land; import android.graphics.Bitmap; import android.text.TextUtils; import android.text.TextWatcher; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import com.mob.tools.gui.AsyncImageView; import com.mob.tools.utils.BitmapHelper; import com.mob.tools.utils.ResHelper; import java.io.File; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.EditPage; import cn.sharesdk.onekeyshare.themes.classic.XView; /** 横屏的编辑页 */ public class EditPageLand extends EditPage implements OnClickListener, TextWatcher, Runnable { private static final int DESIGN_SCREEN_WIDTH= 720; private static final int DESIGN_BOTTOM_HEIGHT = 75; private static final int DESIGN_LEFT_PADDING = 40; private static final int DESIGN_TITLE_HEIGHT_L = 70; private static final int DESIGN_THUMB_HEIGHT_L = 280; private static final int DESIGN_REMOVE_THUMB_HEIGHT_L = 60; public EditPageLand(OnekeyShareThemeImpl impl) { super(impl); } public void onCreate() { super.onCreate(); int screenHeight = ResHelper.getScreenHeight(activity); float ratio = ((float) screenHeight) / DESIGN_SCREEN_WIDTH; maxBodyHeight = 0; llPage = new LinearLayout(activity); llPage.setOrientation(LinearLayout.VERTICAL); activity.setContentView(llPage); rlTitle = new RelativeLayout(activity); rlTitle.setBackgroundColor(0xffe6e9ec); int titleHeight = (int) (DESIGN_TITLE_HEIGHT_L * ratio); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, titleHeight); llPage.addView(rlTitle, lp); initTitle(rlTitle, ratio); RelativeLayout rlBody = new RelativeLayout(activity); rlBody.setBackgroundColor(0xffffffff); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); llPage.addView(rlBody, lp); initBody(rlBody, ratio); LinearLayout llShadow = new LinearLayout(activity); llShadow.setOrientation(LinearLayout.VERTICAL); rlBody.addView(llShadow, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); initShadow(llShadow, ratio); llBottom = new LinearLayout(activity); llBottom.setOrientation(LinearLayout.VERTICAL); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); llPage.addView(llBottom, lp); initBottom(llBottom, ratio); } private void initTitle(RelativeLayout rlTitle, float ratio) { tvCancel = new TextView(activity); tvCancel.setTextColor(0xff3b3b3b); tvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvCancel.setGravity(Gravity.CENTER); int resId = ResHelper.getStringRes(activity, "ssdk_oks_cancel"); if (resId > 0) { tvCancel.setText(resId); } int padding = (int) (DESIGN_LEFT_PADDING * ratio); tvCancel.setPadding(padding, 0, padding, 0); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); rlTitle.addView(tvCancel, lp); tvCancel.setOnClickListener(this); TextView tvTitle = new TextView(activity); tvTitle.setTextColor(0xff3b3b3b); tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); tvTitle.setGravity(Gravity.CENTER); resId = ResHelper.getStringRes(activity, "ssdk_oks_multi_share"); if (resId > 0) { tvTitle.setText(resId); } lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.CENTER_IN_PARENT); rlTitle.addView(tvTitle, lp); tvShare = new TextView(activity); tvShare.setTextColor(0xffff6d11); tvShare.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvShare.setGravity(Gravity.CENTER); resId = ResHelper.getStringRes(activity, "ssdk_oks_share"); if (resId > 0) { tvShare.setText(resId); } tvShare.setPadding(padding, 0, padding, 0); lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); rlTitle.addView(tvShare, lp); tvShare.setOnClickListener(this); } private void initBody(RelativeLayout rlBody, float ratio) { svContent = new ScrollView(activity); rlBody.addView(svContent, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); LinearLayout llContent = new LinearLayout(activity); llContent.setOrientation(LinearLayout.HORIZONTAL); svContent.addView(llContent, new ScrollView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); etContent = new EditText(activity); int padding = (int) (DESIGN_LEFT_PADDING * ratio); etContent.setPadding(padding, padding, padding, padding); etContent.setBackgroundDrawable(null); etContent.setTextColor(0xff3b3b3b); etContent.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21); etContent.setText(sp.getText()); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT); lp.weight = 1; llContent.addView(etContent, lp); etContent.addTextChangedListener(this); rlThumb = new RelativeLayout(activity); rlThumb.setBackgroundColor(0xff313131); int thumbWidth = (int) (DESIGN_THUMB_HEIGHT_L * ratio); int xWidth = (int) (DESIGN_REMOVE_THUMB_HEIGHT_L * ratio); lp = new LinearLayout.LayoutParams(thumbWidth, thumbWidth); lp.rightMargin = lp.bottomMargin = lp.topMargin = padding; llContent.addView(rlThumb, lp); aivThumb = new AsyncImageView(activity) { public void onImageGot(String url, Bitmap bm) { thumb = bm; super.onImageGot(url, bm); } }; aivThumb.setScaleToCropCenter(true); RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(thumbWidth, thumbWidth); rlThumb.addView(aivThumb, rllp); aivThumb.setOnClickListener(this); initThumb(aivThumb); xvRemove = new XView(activity); xvRemove.setRatio(ratio); rllp = new RelativeLayout.LayoutParams(xWidth, xWidth); rllp.addRule(RelativeLayout.ALIGN_PARENT_TOP); rllp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); rlThumb.addView(xvRemove, rllp); xvRemove.setOnClickListener(this); } private void initBottom(LinearLayout llBottom, float ratio) { LinearLayout llAt = new LinearLayout(activity); llAt.setPadding(0, 0, 0, 5); llAt.setBackgroundColor(0xffffffff); int bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, bottomHeight); llBottom.addView(llAt, lp); tvAt = new TextView(activity); tvAt.setTextColor(0xff3b3b3b); tvAt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21); tvAt.setGravity(Gravity.BOTTOM); tvAt.setText("@"); int padding = (int) (DESIGN_LEFT_PADDING * ratio); tvAt.setPadding(padding, 0, padding, 0); lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); llAt.addView(tvAt, lp); tvAt.setOnClickListener(this); if (isShowAtUserLayout(platform.getName())) { tvAt.setVisibility(View.VISIBLE); } else { tvAt.setVisibility(View.INVISIBLE); } tvTextCouter = new TextView(activity); tvTextCouter.setTextColor(0xff3b3b3b); tvTextCouter.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvTextCouter.setGravity(Gravity.BOTTOM | Gravity.RIGHT); onTextChanged(etContent.getText(), 0, 0, 0); tvTextCouter.setPadding(padding, 0, padding, 0); lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.weight = 1; llAt.addView(tvTextCouter, lp); View v = new View(activity); v.setBackgroundColor(0xffcccccc); int px1 = ratio > 1 ? ((int) ratio) : 1; lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1); llBottom.addView(v, lp); } private void initShadow(LinearLayout llShadow, float ratio) { int px1 = ratio > 1 ? ((int) ratio) : 1; LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1); View v = new View(activity); v.setBackgroundColor(0x29000000); llShadow.addView(v, lp); v = new View(activity); v.setBackgroundColor(0x14000000); llShadow.addView(v, lp); v = new View(activity); v.setBackgroundColor(0x07000000); llShadow.addView(v, lp); } private void initThumb(AsyncImageView aivThumb) { String imageUrl = sp.getImageUrl(); String imagePath = sp.getImagePath(); String[] imageArray = sp.getImageArray(); Bitmap pic = null; rlThumb.setVisibility(View.VISIBLE); if(!TextUtils.isEmpty(imagePath) && new File(imagePath).exists()) { try { pic = BitmapHelper.getBitmap(imagePath); } catch (Throwable e) { e.printStackTrace(); } } if (pic != null) { thumb = pic; aivThumb.setBitmap(pic); } else if (imageArray != null && imageArray.length > 0) { if (!TextUtils.isEmpty(imageArray[0]) && new File(imageArray[0]).exists()) { try { pic = BitmapHelper.getBitmap(imagePath); } catch (Throwable e) { e.printStackTrace(); } } } if (pic != null) { thumb = pic; aivThumb.setBitmap(pic); } else if (pic == null && !TextUtils.isEmpty(imageUrl)) { aivThumb.execute(imageUrl, 0); } else { rlThumb.setVisibility(View.GONE); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/FriendListPageLand.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.land; import com.mob.tools.utils.ResHelper; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.FriendListPage; /** 横屏的好友列表 */ public class FriendListPageLand extends FriendListPage { private static final int DESIGN_SCREEN_WIDTH = 1280; private static final int DESIGN_TITLE_HEIGHT = 70; public FriendListPageLand(OnekeyShareThemeImpl impl) { super(impl); } protected float getRatio() { float screenWidth = ResHelper.getScreenWidth(activity); return screenWidth / DESIGN_SCREEN_WIDTH; } protected int getDesignTitleHeight() { return DESIGN_TITLE_HEIGHT; } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/PlatformPageAdapterLand.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.land; import android.content.Context; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import cn.sharesdk.onekeyshare.themes.classic.PlatformPage; import cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter; /** 横屏的九宫格页面适配器 */ public class PlatformPageAdapterLand extends PlatformPageAdapter { private static final int DESIGN_SCREEN_WIDTH_L = 1280; private static final int DESIGN_CELL_WIDTH_L = 160; private static final int DESIGN_SEP_LINE_WIDTH = 1; private static final int DESIGN_LOGO_HEIGHT = 76; private static final int DESIGN_PADDING_TOP = 20; public PlatformPageAdapterLand(PlatformPage page, ArrayList cells) { super(page, cells); } protected void calculateSize(Context context, ArrayList plats) { int screenWidth = ResHelper.getScreenWidth(context); float ratio = ((float) screenWidth) / DESIGN_SCREEN_WIDTH_L; int cellWidth = (int) (DESIGN_CELL_WIDTH_L * ratio); lineSize = screenWidth / cellWidth; sepLineWidth = (int) (DESIGN_SEP_LINE_WIDTH * ratio); sepLineWidth = sepLineWidth < 1 ? 1 : sepLineWidth; logoHeight = (int) (DESIGN_LOGO_HEIGHT * ratio); paddingTop = (int) (DESIGN_PADDING_TOP * ratio); bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio); cellHeight = (screenWidth - sepLineWidth * 3) / (lineSize - 1); panelHeight = cellHeight + sepLineWidth; } protected void collectCells(ArrayList plats) { int count = plats.size(); if (count < lineSize) { int lineCount = (count / lineSize); if (count % lineSize != 0) { lineCount++; } cells = new Object[1][lineCount * lineSize]; } else { int pageCount = (count / lineSize); if (count % lineSize != 0) { pageCount++; } cells = new Object[pageCount][lineSize]; } for (int i = 0; i < count; i++) { int p = i / lineSize; cells[p][i - lineSize * p] = plats.get(i); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/PlatformPageLand.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.land; import java.util.ArrayList; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.PlatformPage; import cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter; /** 横屏的九宫格页面 */ public class PlatformPageLand extends PlatformPage { public PlatformPageLand(OnekeyShareThemeImpl impl) { super(impl); } public void onCreate() { requestLandscapeOrientation(); super.onCreate(); } protected PlatformPageAdapter newAdapter(ArrayList cells) { return new PlatformPageAdapterLand(this, cells); } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/EditPagePort.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.port; import android.graphics.Bitmap; import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import com.mob.tools.gui.AsyncImageView; import com.mob.tools.utils.BitmapHelper; import com.mob.tools.utils.ResHelper; import java.io.File; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.EditPage; import cn.sharesdk.onekeyshare.themes.classic.XView; /** 竖屏的编辑页 */ public class EditPagePort extends EditPage { private static final int DESIGN_SCREEN_HEIGHT= 1280; private static final int DESIGN_TITLE_HEIGHT = 96; private static final int DESIGN_BOTTOM_HEIGHT = 75; private static final int DESIGN_LEFT_PADDING = 40; private static final int DESIGN_THUMB_HEIGHT = 300; private static final int DESIGN_REMOVE_THUMB_HEIGHT = 70; public EditPagePort(OnekeyShareThemeImpl impl) { super(impl); } public void onCreate() { super.onCreate(); int screenHeight = ResHelper.getScreenHeight(activity); float ratio = ((float) screenHeight) / DESIGN_SCREEN_HEIGHT; maxBodyHeight = 0; llPage = new LinearLayout(activity); llPage.setOrientation(LinearLayout.VERTICAL); activity.setContentView(llPage); rlTitle = new RelativeLayout(activity); rlTitle.setBackgroundColor(0xffe6e9ec); int titleHeight = (int) (DESIGN_TITLE_HEIGHT * ratio); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, titleHeight); llPage.addView(rlTitle, lp); initTitle(rlTitle, ratio); RelativeLayout rlBody = new RelativeLayout(activity); rlBody.setBackgroundColor(0xffffffff); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); llPage.addView(rlBody, lp); initBody(rlBody, ratio); LinearLayout llShadow = new LinearLayout(activity); llShadow.setOrientation(LinearLayout.VERTICAL); rlBody.addView(llShadow, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); initShadow(llShadow, ratio); llBottom = new LinearLayout(activity); llBottom.setOrientation(LinearLayout.VERTICAL); lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); llPage.addView(llBottom, lp); initBottom(llBottom, ratio); } private void initTitle(RelativeLayout rlTitle, float ratio) { tvCancel = new TextView(activity); tvCancel.setTextColor(0xff3b3b3b); tvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvCancel.setGravity(Gravity.CENTER); int resId = ResHelper.getStringRes(activity, "ssdk_oks_cancel"); if (resId > 0) { tvCancel.setText(resId); } int padding = (int) (DESIGN_LEFT_PADDING * ratio); tvCancel.setPadding(padding, 0, padding, 0); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); rlTitle.addView(tvCancel, lp); tvCancel.setOnClickListener(this); TextView tvTitle = new TextView(activity); tvTitle.setTextColor(0xff3b3b3b); tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); tvTitle.setGravity(Gravity.CENTER); resId = ResHelper.getStringRes(activity, "ssdk_oks_multi_share"); if (resId > 0) { tvTitle.setText(resId); } lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.CENTER_IN_PARENT); rlTitle.addView(tvTitle, lp); tvShare = new TextView(activity); tvShare.setTextColor(0xffff6d11); tvShare.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); tvShare.setGravity(Gravity.CENTER); resId = ResHelper.getStringRes(activity, "ssdk_oks_share"); if (resId > 0) { tvShare.setText(resId); } tvShare.setPadding(padding, 0, padding, 0); lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); rlTitle.addView(tvShare, lp); tvShare.setOnClickListener(this); } private void initBody(RelativeLayout rlBody, float ratio) { svContent = new ScrollView(activity); rlBody.addView(svContent, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); LinearLayout llContent = new LinearLayout(activity); llContent.setOrientation(LinearLayout.VERTICAL); svContent.addView(llContent, new ScrollView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); etContent = new EditText(activity); int padding = (int) (DESIGN_LEFT_PADDING * ratio); etContent.setPadding(padding, padding, padding, padding); etContent.setBackgroundDrawable(null); etContent.setTextColor(0xff3b3b3b); etContent.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21); etContent.setText(sp.getText()); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); llContent.addView(etContent, lp); etContent.addTextChangedListener(this); rlThumb = new RelativeLayout(activity); rlThumb.setBackgroundColor(0xff313131); int thumbWidth = (int) (DESIGN_THUMB_HEIGHT * ratio); int xWidth = (int) (DESIGN_REMOVE_THUMB_HEIGHT * ratio); lp = new LinearLayout.LayoutParams(thumbWidth, thumbWidth); lp.leftMargin = lp.rightMargin = lp.bottomMargin = lp.topMargin = padding; llContent.addView(rlThumb, lp); aivThumb = new AsyncImageView(activity) { public void onImageGot(String url, Bitmap bm) { thumb = bm; super.onImageGot(url, bm); } }; aivThumb.setScaleToCropCenter(true); RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(thumbWidth, thumbWidth); rlThumb.addView(aivThumb, rllp); aivThumb.setOnClickListener(this); initThumb(aivThumb); xvRemove = new XView(activity); xvRemove.setRatio(ratio); rllp = new RelativeLayout.LayoutParams(xWidth, xWidth); rllp.addRule(RelativeLayout.ALIGN_PARENT_TOP); rllp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); rlThumb.addView(xvRemove, rllp); xvRemove.setOnClickListener(this); } private void initBottom(LinearLayout llBottom, float ratio) { LinearLayout llAt = new LinearLayout(activity); llAt.setPadding(0, 0, 0, 5); llAt.setBackgroundColor(0xffffffff); int bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, bottomHeight); llBottom.addView(llAt, lp); tvAt = new TextView(activity); tvAt.setTextColor(0xff3b3b3b); tvAt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); tvAt.setGravity(Gravity.BOTTOM); tvAt.setText("@"); int padding = (int) (DESIGN_LEFT_PADDING * ratio); tvAt.setPadding(padding, 0, padding, 0); lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); llAt.addView(tvAt, lp); tvAt.setOnClickListener(this); if (isShowAtUserLayout(platform.getName())) { tvAt.setVisibility(View.VISIBLE); } else { tvAt.setVisibility(View.INVISIBLE); } tvTextCouter = new TextView(activity); tvTextCouter.setTextColor(0xff3b3b3b); tvTextCouter.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21); tvTextCouter.setGravity(Gravity.BOTTOM | Gravity.RIGHT); onTextChanged(etContent.getText(), 0, 0, 0); tvTextCouter.setPadding(padding, 0, padding, 0); lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.weight = 1; llAt.addView(tvTextCouter, lp); View v = new View(activity); v.setBackgroundColor(0xffcccccc); int px1 = ratio > 1 ? ((int) ratio) : 1; lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1); llBottom.addView(v, lp); } private void initShadow(LinearLayout llShadow, float ratio) { int px1 = ratio > 1 ? ((int) ratio) : 1; LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1); View v = new View(activity); v.setBackgroundColor(0x29000000); llShadow.addView(v, lp); v = new View(activity); v.setBackgroundColor(0x14000000); llShadow.addView(v, lp); v = new View(activity); v.setBackgroundColor(0x07000000); llShadow.addView(v, lp); } private void initThumb(AsyncImageView aivThumb) { String imageUrl = sp.getImageUrl(); String imagePath = sp.getImagePath(); String[] imageArray = sp.getImageArray(); Bitmap pic = null; rlThumb.setVisibility(View.VISIBLE); if(!TextUtils.isEmpty(imagePath) && new File(imagePath).exists()) { try { pic = BitmapHelper.getBitmap(imagePath); } catch (Throwable e) { e.printStackTrace(); } } if (pic != null) { thumb = pic; aivThumb.setBitmap(pic); } else if (imageArray != null && imageArray.length > 0) { if (!TextUtils.isEmpty(imageArray[0]) && new File(imageArray[0]).exists()) { try { pic = BitmapHelper.getBitmap(imagePath); } catch (Throwable e) { e.printStackTrace(); } } } if (pic != null) { thumb = pic; aivThumb.setBitmap(pic); } else if (pic == null && !TextUtils.isEmpty(imageUrl)) { aivThumb.execute(imageUrl, 0); } else { rlThumb.setVisibility(View.GONE); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/FriendListPagePort.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.port; import com.mob.tools.utils.ResHelper; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.FriendListPage; /** 竖屏的好友列表 */ public class FriendListPagePort extends FriendListPage { private static final int DESIGN_SCREEN_WIDTH = 720; private static final int DESIGN_TITLE_HEIGHT = 96; public FriendListPagePort(OnekeyShareThemeImpl impl) { super(impl); } protected float getRatio() { float screenWidth = ResHelper.getScreenWidth(activity); return screenWidth / DESIGN_SCREEN_WIDTH; } protected int getDesignTitleHeight() { return DESIGN_TITLE_HEIGHT; } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/PlatformPageAdapterPort.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.port; import android.content.Context; import com.mob.tools.utils.ResHelper; import java.util.ArrayList; import cn.sharesdk.onekeyshare.themes.classic.PlatformPage; import cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter; /** 竖屏的九宫格页面适配器 */ public class PlatformPageAdapterPort extends PlatformPageAdapter { private static final int DESIGN_SCREEN_WIDTH_P = 720; private static final int DESIGN_SEP_LINE_WIDTH = 1; private static final int DESIGN_LOGO_HEIGHT = 76; private static final int DESIGN_PADDING_TOP = 20; private static final int PAGE_SIZE_P = 12; private static final int LINE_SIZE_P = 4; public PlatformPageAdapterPort(PlatformPage page, ArrayList cells) { super(page, cells); } protected void calculateSize(Context context, ArrayList plats) { int screenWidth = ResHelper.getScreenWidth(context); lineSize = LINE_SIZE_P; float ratio = ((float) screenWidth) / DESIGN_SCREEN_WIDTH_P; sepLineWidth = (int) (DESIGN_SEP_LINE_WIDTH * ratio); sepLineWidth = sepLineWidth < 1 ? 1 : sepLineWidth; logoHeight = (int) (DESIGN_LOGO_HEIGHT * ratio); paddingTop = (int) (DESIGN_PADDING_TOP * ratio); bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio); cellHeight = (screenWidth - sepLineWidth * 3) / 4; if (plats.size() <= lineSize) { panelHeight = cellHeight + sepLineWidth; } else if (plats.size() <= PAGE_SIZE_P - lineSize) { panelHeight = (cellHeight + sepLineWidth) * 2; } else { panelHeight = (cellHeight + sepLineWidth) * 3; } } protected void collectCells(ArrayList plats) { int count = plats.size(); if (count < PAGE_SIZE_P) { int lineCount = (count / lineSize); if (count % lineSize != 0) { lineCount++; } cells = new Object[1][lineCount * lineSize]; } else { int pageCount = (count / PAGE_SIZE_P); if (count % PAGE_SIZE_P != 0) { pageCount++; } cells = new Object[pageCount][PAGE_SIZE_P]; } for (int i = 0; i < count; i++) { int p = i / PAGE_SIZE_P; cells[p][i - PAGE_SIZE_P * p] = plats.get(i); } } } ================================================ FILE: app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/PlatformPagePort.java ================================================ /* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package cn.sharesdk.onekeyshare.themes.classic.port; import java.util.ArrayList; import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl; import cn.sharesdk.onekeyshare.themes.classic.PlatformPage; import cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter; /** 竖屏的九宫格页面 */ public class PlatformPagePort extends PlatformPage { public PlatformPagePort(OnekeyShareThemeImpl impl) { super(impl); } public void onCreate() { requestPortraitOrientation(); super.onCreate(); } protected PlatformPageAdapter newAdapter(ArrayList cells) { return new PlatformPageAdapterPort(this, cells); } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/App.kt ================================================ package com.yoyiyi.soleil import android.app.Activity import android.app.Application import android.content.Context import android.support.multidex.MultiDex import com.facebook.stetho.Stetho import com.yoyiyi.soleil.di.component.AppComponent import com.yoyiyi.soleil.di.component.DaggerAppComponent import com.yoyiyi.soleil.di.module.ApiModule import com.yoyiyi.soleil.di.module.AppModule import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.CrashHandler import com.yoyiyi.soleil.utils.LogUtils import com.yoyiyi.soleil.utils.PrefsUtils import com.yoyiyi.soleil.utils.net.NetworkUtils import java.util.* @Suppress("DEPRECATION") /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/4/28 11:27 * * 描述:APP * * # # * * # _oo0oo_ # * * # o8888888o # * * # 88" . "88 # * * # (| -_- |) # * * # 0\ = /0 # * * # ___/`---'\___ # * * # .' \\| |# '. # * * # / \\||| : |||# \ # * * # / _||||| -:- |||||- \ # * * # | | \\\ - #/ | | # * * # | \_| ''\---/'' |_/ | # * * # \ .-\__ '-' ___/-. / # * * # ___'. .' /--.--\ `. .'___ # * * # ."" '< `.___\_<|>_/___.' >' "". # * * # | | : `- \`.;`\ _ /`;.`/ - ` : | | # * * # \ \ `_. \_ __\ /__ _/ .-` / / # * * # =====`-.____`.___ \_____/___.-`___.-'===== # * * # `=---=' # * * # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * * # # * * # 佛祖保佑 永无BUG # * * # # */ class App : Application() { private var allActivities: HashSet? = null val appComponent: AppComponent by lazy { DaggerAppComponent.builder() .apiModule(ApiModule()) .appModule(AppModule(this)) .build() } companion object { lateinit var instance: App } override fun onCreate() { super.onCreate() AppUtils.init(this) instance = this initNetwork() initStetho() initCrashHandler() initLog() initPrefs() } override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) MultiDex.install(this) } /** * 增加Activity * @param act act */ fun addActivity(act: Activity) { if (allActivities == null) { allActivities = HashSet() } else { allActivities?.add(act) } } /** * 移除Activity * @param act act */ fun removeActivity(act: Activity) { allActivities?.remove(act) } /** * 退出应用 */ @Synchronized fun exitApp() { allActivities?.let { for (act in it) { act.finish() } } android.os.Process.killProcess(android.os.Process.myPid()) System.exit(0) } /** * 初始化sp */ private fun initPrefs() { PrefsUtils.init(this, packageName + "_preference", Context.MODE_MULTI_PROCESS) } /** * 初始化调试 */ private fun initStetho() { Stetho.initialize( Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)) .build()) } /** * 开启网络监听 */ private fun initNetwork() { NetworkUtils.startNetService(this) } /** * 初始化崩溃日志 */ private fun initCrashHandler() { CrashHandler.getInstance().init(this) } /** * 初始化log */ private fun initLog() { LogUtils.init(this) } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/up/ArchiveAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.up import android.support.v7.widget.RecyclerView import android.support.v7.widget.StaggeredGridLayoutManager import android.view.ViewGroup import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.user.MulUpDetail import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.NumberUtils import com.yoyiyi.soleil.utils.SpanUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/17 16:06 * * 描述: */ class ArchiveAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulUpDetail.TYPE_ARCHIVE_LIVE, R.layout.layout_item_up_detail_archive_live) addItemType(MulUpDetail.TYPE_ARCHIVE_HEAD, R.layout.layout_item_up_detail_archive_head) addItemType(MulUpDetail.TYPE_ARCHIVE_ALL_SUBMIT_VIDEO, R.layout.layout_item_up_detail_archive_submited_video_item) addItemType(MulUpDetail.TYPE_ARCHIVE_FAVOURITE, R.layout.layout_item_up_detail_archive_favourite) } override fun convert(holder: BaseViewHolder, mulUpDetail: MulUpDetail) { when (mulUpDetail.itemType) { MulUpDetail.TYPE_ARCHIVE_LIVE -> holder.setText(R.id.tv_live_state, "正在轮播: ${mulUpDetail.live?.title}") MulUpDetail.TYPE_ARCHIVE_HEAD -> { val span = SpanUtils() if (mulUpDetail.state == 0) { span.append("${mulUpDetail.title}") .appendSpace(10) .append("${mulUpDetail.count}") .setForegroundColor(AppUtils.getColor(R.color.font_gray)) .appendSpace(10) .appendImage(R.drawable.ic_invisible) .append("未公开") .setForegroundColor(AppUtils.getColor(R.color.font_gray)) } else { span.append("${mulUpDetail.title}") .append("${mulUpDetail.count}") .setForegroundColor(AppUtils.getColor(R.color.font_gray)) } holder.setText(R.id.tv_title, span.create()) holder.setVisible(R.id.tv_more, mulUpDetail.count != 0) } MulUpDetail.TYPE_ARCHIVE_ALL_SUBMIT_VIDEO//全部投稿 -> { mulUpDetail.archiveBean?.let { holder.setText(R.id.tv_video_title, it.title) .setText(R.id.tv_video_play_num, NumberUtils.format("${it.play}")) .setText(R.id.tv_video_favourite, NumberUtils.format("${it.danmaku}")) Glide.with(mContext) .load(it.cover) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) if (mulUpDetail.position % 2 == 0) { val params = holder.itemView.layoutParams as ViewGroup.MarginLayoutParams params.setMargins( mContext.resources.getDimension(R.dimen.dp10).toInt(), mContext.resources.getDimension(R.dimen.dp10).toInt(), mContext.resources.getDimension(R.dimen.dp5).toInt(), mContext.resources.getDimension(R.dimen.dp10).toInt()) holder.itemView.layoutParams = params } else { val params = holder.itemView.layoutParams as ViewGroup.MarginLayoutParams params.setMargins( mContext.resources.getDimension(R.dimen.dp5).toInt(), mContext.resources.getDimension(R.dimen.dp10).toInt(), mContext.resources.getDimension(R.dimen.dp10).toInt(), mContext.resources.getDimension(R.dimen.dp10).toInt()) holder.itemView.layoutParams = params } } } MulUpDetail.TYPE_ARCHIVE_FAVOURITE -> { val recyclerView = holder.getView(R.id.recycler) recyclerView.setHasFixedSize(true) val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL) recyclerView.layoutManager = layoutManager mulUpDetail.favourite?.let { recyclerView.adapter = ArchiveFavouriteAdapter(it.item) } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/up/ArchiveFavouriteAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.up import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.user.UpDetail import com.yoyiyi.soleil.utils.EmptyUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/17 19:24 * * 描述: */ class ArchiveFavouriteAdapter(data: List?) : BaseQuickAdapter(R.layout.item_up_detail_archive_favourite, data) { override fun convert(holder: BaseViewHolder, item: UpDetail.DataBean.FavouriteBean.ItemBeanX) { val cover = item.cover val coverId = intArrayOf(R.id.iv_view1, R.id.iv_view2, R.id.iv_view3) if (EmptyUtils.isNotEmpty(cover)) { for (i in cover.indices) { Glide.with(mContext) .load(cover[i].pic) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(coverId[i])) } holder.setText(R.id.tv_favourite_title, item.name) .setText(R.id.tv_favourite_count, "${item.cur_count}") if (holder.adapterPosition == itemCount - 1) { holder.setVisible(R.id.space, true) } else { holder.setVisible(R.id.space, false) } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/up/FavouriteAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.up import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.user.MulUpDetail import jp.wasabeef.glide.transformations.RoundedCornersTransformation /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/17 16:06 * * 描述: */ class FavouriteAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulUpDetail.TYPE_FAVOURITE_ITEM, R.layout.item_up_detail_favourite) } override fun convert(holder: BaseViewHolder, mulUpDetail: MulUpDetail) { when (mulUpDetail.itemType) { MulUpDetail.TYPE_FAVOURITE_ITEM -> { mulUpDetail.favouriteBean?.let { Glide.with(mContext) .load(it.cover[0].pic) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0)) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_title, it.name) .setText(R.id.tv_favourite_count, "${it.cur_count}") .setText(R.id.tv_video_state, if (it.state == 2) "公开 · ${it.cur_count} 个内容" else "私密") } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/up/SubmitedVideoAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.up import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.user.MulUpDetail import com.yoyiyi.soleil.utils.NumberUtils import com.yoyiyi.soleil.utils.time.FormatUtils import jp.wasabeef.glide.transformations.RoundedCornersTransformation /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/17 13:23 * * 描述: */ class SubmitedVideoAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulUpDetail.TYPE_SUBMITED_VIDEO_ELEC, R.layout.layout_item_up_submited_video_electricize) addItemType(MulUpDetail.TYPE_SUBMITED_VIDEO_ITEM, R.layout.layout_item_up_submited_video_item) } override fun convert(holder: BaseViewHolder, mulUpDetail: MulUpDetail) { when (mulUpDetail.itemType) { MulUpDetail.TYPE_SUBMITED_VIDEO_ELEC -> { } MulUpDetail.TYPE_SUBMITED_VIDEO_ITEM -> { mulUpDetail.archiveBean?.let { Glide.with(mContext) .load(it.cover) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0)) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_title, it.title) .setText(R.id.tv_video_play, NumberUtils.format("${it.play}")) .setText(R.id.tv_video_danmaku, NumberUtils.format("${it.danmaku}")) .setText(R.id.tv_duration, FormatUtils.formatDuration("${it.duration}")) } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/up/UpAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.up import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.search.Up import com.yoyiyi.soleil.utils.NumberUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/21 9:20 * * 描述:up主 */ class UpAdapter(data: List) : BaseQuickAdapter(R.layout.item_search_up, data) { override fun convert(holder: BaseViewHolder, item: Up.DataBean.ItemsBean) { holder.setText(R.id.tv_uname, item.title) .setText(R.id.tv_des, if (item.sign.isNotEmpty()) item.sign else "") .setText(R.id.tv_fans, "粉丝数: " + NumberUtils.format("${item.fans}")) .setText(R.id.tv_videos, "视频数: " + NumberUtils.format("${item.archives}")) Glide.with(mContext) .load(item.cover) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_avatar) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/video/CommentAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.video import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.app.video.MulComment import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.SpanUtils import com.yoyiyi.soleil.utils.time.TimeUtils import com.yoyiyi.soleil.widget.CircleImageView /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/15 10:07 * * 描述: */ class CommentAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulComment.TYPE_COMMENT_HOT_ITEM, R.layout.layout_item_video_detail_comment) addItemType(MulComment.TYPE_COMMENT_MORE, R.layout.layout_item_video_detail_more) addItemType(MulComment.TYPE_COMMENT_NOMAL_ITEM, R.layout.layout_item_video_detail_comment) } override fun convert(holder: BaseViewHolder, mulComment: MulComment) { when (mulComment.itemType) { MulComment.TYPE_COMMENT_HOT_ITEM -> { mulComment.hotsBean?.let { holder.setText(R.id.tv_uname, SpanUtils() .append(it.member.uname) .setForegroundColor(AppUtils.getColor(R.color.gray_20)) .appendSpace(10) .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER) .create()) .setText(R.id.tv_like, "${it.like}") .setText(R.id.tv_floor, "#${it.floor}") .setText(R.id.tv_time, TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong())) .setText(R.id.tv_message, it.content.message) .setText(R.id.tv_rcount, "共有${it.rcount}条回复 >") Glide.with(mContext) .load(it.member.avatar) .centerCrop() .placeholder(R.drawable.bili_default_avatar) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) } } MulComment.TYPE_COMMENT_MORE -> { } MulComment.TYPE_COMMENT_NOMAL_ITEM -> { mulComment.repliesBean?.let { holder.setVisible(R.id.tv_rcount, false) .setText(R.id.tv_like, "${it.like}") .setText(R.id.tv_uname, SpanUtils() .append(it.member.uname) .setForegroundColor(AppUtils.getColor(R.color.gray_20)) .appendSpace(10) .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER) .create()) .setText(R.id.tv_floor, "#${it.floor}") .setText(R.id.tv_time, com.yoyiyi.soleil.utils.time.TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong())) .setText(R.id.tv_message, it.content.message) Glide.with(mContext) .load(it.member.avatar) .centerCrop() .placeholder(R.drawable.bili_default_avatar) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) } } } } private fun getIdRes(lv: Int): Int = when (lv) { 1 -> R.drawable.ic_lv1 2 -> R.drawable.ic_lv2 3 -> R.drawable.ic_lv3 4 -> R.drawable.ic_lv4 5 -> R.drawable.ic_lv5 6 -> R.drawable.ic_lv6 7 -> R.drawable.ic_lv7 8 -> R.drawable.ic_lv8 9 -> R.drawable.ic_lv9 else -> R.drawable.ic_lv0 } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/app/video/SummaryAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.app.video import android.content.Intent import android.view.LayoutInflater import android.view.View import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.app.video.MulSummary import com.yoyiyi.soleil.module.app.up.UpDetailActivity import com.yoyiyi.soleil.utils.NumberUtils import com.yoyiyi.soleil.utils.time.TimeUtils import com.yoyiyi.soleil.widget.flowlayout.FlowLayout import com.yoyiyi.soleil.widget.flowlayout.TagAdapter import com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout import java.util.* /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/15 10:07 * * 描述: */ class SummaryAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulSummary.TYPE_DES, R.layout.layout_item_video_detail_summary_des) addItemType(MulSummary.TYPE_OWNER, R.layout.layout_item_video_detail_summary_owner) addItemType(MulSummary.TYPE_RELATE, R.layout.layout_item_video_detail_summary_relate) addItemType(MulSummary.TYPE_RELATE_HEAD, R.layout.layout_item_video_detail_summary_relate_head) } override fun convert(holder: BaseViewHolder, mulSummary: MulSummary) { when (mulSummary.itemType) { MulSummary.TYPE_DES -> mulSummary.state?.let { holder.setText(R.id.tv_title, mulSummary.title) .setText(R.id.tv_video_play_num, NumberUtils.format("${it.view}")) .setText(R.id.tv_video_danmaku, NumberUtils.format("${it.danmaku}")) .setText(R.id.tv_share, NumberUtils.format("${it.share}")) .setText(R.id.tv_coin, NumberUtils.format("${it.coin}")) .setText(R.id.tv_favourite, NumberUtils.format("${it.favorite}")) .setText(R.id.tv_down, "缓存") .setText(R.id.tv_des, mulSummary.desc) } MulSummary.TYPE_OWNER -> { mulSummary.owner?.let { Glide.with(mContext) .load(it.face) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) holder.getView(R.id.iv_avatar).setOnClickListener { mContext.startActivity(Intent(mContext, UpDetailActivity::class.java)) } val date = TimeUtils.millis2String((mulSummary.ctime * Math.pow(10.0, 3.0)).toLong()) val split = date.split("-".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() holder.setText(R.id.tv_name, it.name) .setText(R.id.tv_time, split[0] + "年" + split[1] + "月" + split[2].split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[0] + "日" + "投递") val tagsLayout = holder.getView(R.id.tags_layout) val tag = ArrayList() mulSummary.tags?.forEach { tagBean -> tag.add(tagBean.tag_name) } tagsLayout.adapter = object : TagAdapter(tag) { override fun getView(flowLayout: FlowLayout, i: Int, listBean: String): View { val mTags = LayoutInflater.from(mContext).inflate(R.layout.layout_hot_tags_item, flowLayout, false) as TextView mTags.text = listBean // mTags.setOnClickListener{ TotalSearchActivity.startActivity(mContext, listBean.key)} return mTags } } } } MulSummary.TYPE_RELATE_HEAD -> { } MulSummary.TYPE_RELATE -> { mulSummary.relates?.let { Glide.with(mContext) .load(it.pic) .centerCrop() .placeholder(R.drawable.bili_default_image_tv) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_video_preview) as ImageView) holder.setText(R.id.tv_video_title, it.title) .setText(R.id.tv_video_up, it.owner.name) .setText(R.id.tv_video_play, NumberUtils.format("${it.stat.view}")) .setText(R.id.tv_video_danmaku, NumberUtils.format("${it.stat.danmaku}")) } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.bangumi import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.RecyclerView import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.bangumi.BangumiDetail import com.yoyiyi.soleil.bean.bangumi.MulBangumiDetail import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.EmptyUtils import com.yoyiyi.soleil.utils.NumberUtils import com.yoyiyi.soleil.utils.SpanUtils import com.yoyiyi.soleil.utils.time.TimeUtils import com.yoyiyi.soleil.widget.CircleImageView import com.yoyiyi.soleil.widget.flowlayout.FlowLayout import com.yoyiyi.soleil.widget.flowlayout.TagAdapter import com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout import jp.wasabeef.glide.transformations.BlurTransformation /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/11 22:02 * * 描述:番剧详情 */ class BangumiDetailAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulBangumiDetail.TYPE_HEAD, R.layout.layout_item_bangumi_detail_info)//头部信息 addItemType(MulBangumiDetail.TYPE_SEASON, R.layout.layout_item_bangumi_detail_recycler)//分季 addItemType(MulBangumiDetail.TYPE_EPISODE_HEAD, R.layout.layout_item_bangumi_detail_head)//分集头部 addItemType(MulBangumiDetail.TYPE_EPISODE_ITEM, R.layout.layout_item_bangumi_detail_recycler)//分集 addItemType(MulBangumiDetail.TYPE_CONTRACTED, R.layout.layout_bangumi_detail_contracted)//承包 addItemType(MulBangumiDetail.TYPE_DES, R.layout.layout_item_bangumi_detail_des)//简介 addItemType(MulBangumiDetail.TYPE_RECOMMEND_HEAD, R.layout.layout_item_bangumi_detail_head)//推荐头部 addItemType(MulBangumiDetail.TYPE_RECOMMEND_ITEM, R.layout.layout_item_bangumi_detail_recommend)//推荐item addItemType(MulBangumiDetail.TYPE_COMMENT_HEAD, R.layout.layout_item_bangumi_detail_head)//评论头部 addItemType(MulBangumiDetail.TYPE_COMMENT_HOT_ITEM, R.layout.layout_item_bangumi_detail_comment)//热门评论 addItemType(MulBangumiDetail.TYPE_COMMENT_MORE, R.layout.layout_item_bangumi_detail_more)//更多推荐 addItemType(MulBangumiDetail.TYPE_COMMENT_NOMAL_ITEM, R.layout.layout_item_bangumi_detail_comment)//评论 } override fun convert(holder: BaseViewHolder, mulBangumiDetail: MulBangumiDetail) { when (mulBangumiDetail.itemType) { MulBangumiDetail.TYPE_HEAD//头部信息 -> if (!mulBangumiDetail.isPrepare) { holder.setText(R.id.tv_play, "播放:${NumberUtils.format("${mulBangumiDetail.playCount}")}") .setText(R.id.tv_follow, "追番${NumberUtils.format("${mulBangumiDetail.favorites}")}") .setText(R.id.tv_state, if (mulBangumiDetail.isFinish == "0") "连载中" else "已完结") Glide.with(mContext) .load(mulBangumiDetail.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_pic)) Glide.with(mContext) .load(mulBangumiDetail.cover) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .bitmapTransform(BlurTransformation(mContext, 26)) .dontAnimate() .into(holder.getView(R.id.iv_pic_big)) } MulBangumiDetail.TYPE_SEASON//分季 -> { val recyclerSeason = holder.getView(R.id.recycler) recyclerSeason.setHasFixedSize(true) val layoutManagerSeason = LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false) recyclerSeason.layoutManager = layoutManagerSeason mulBangumiDetail.seasonsTitle?.let { recyclerSeason.adapter = BangumiDetailSeasonAdapter(mulBangumiDetail.seasonsBeanList, it) } } MulBangumiDetail.TYPE_EPISODE_ITEM//选集 -> { val recyclerEpisode = holder.getView(R.id.recycler) recyclerEpisode.setHasFixedSize(true) val layoutManagerEpisode = LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false) recyclerEpisode.layoutManager = layoutManagerEpisode recyclerEpisode.adapter = BangumiDetailEpisodeAdapter(mulBangumiDetail.episodesBeans) } MulBangumiDetail.TYPE_EPISODE_HEAD//选集头部 -> { holder.setText(R.id.tv_title, "选集") if (TextUtils.equals(mulBangumiDetail.isFinish, "1")) { holder.setText(R.id.tv_online, "一共 ${mulBangumiDetail.totalCount} 话") } else { holder.setText(R.id.tv_online, "更新至第 ${mulBangumiDetail.totalCount} 话") } } MulBangumiDetail.TYPE_CONTRACTED//承包 -> { holder.setText(R.id.tv_pay_count, "已有${mulBangumiDetail.totalBpCount}人承包了这部番") .setText(R.id.tv_week_count, "等${mulBangumiDetail.weekBpCount}人七日内承包了这部番") val ids = intArrayOf(R.id.iv_avatar1, R.id.iv_avatar2, R.id.iv_avatar3, R.id.iv_avatar1, R.id.iv_avatar4) val beanList = mulBangumiDetail.listBeanList if (EmptyUtils.isNotEmpty(beanList)) { beanList?.forEach { Glide.with(mContext) .load(it.face) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_avatar) .dontAnimate() .into(holder.getView(ids[beanList.indexOf(it)])) } } } MulBangumiDetail.TYPE_DES//简介 -> { holder.setText(R.id.tv_des, mulBangumiDetail.evaluate) .setText(R.id.tv_title, "简介") .setText(R.id.tv_online, "更多") val tagsLayout = holder.getView(R.id.tags_layout) tagsLayout.adapter = object : TagAdapter(mulBangumiDetail.tagsBeanList) { override fun getView(flowLayout: FlowLayout, i: Int, listBean: BangumiDetail.TagsBean): View { val mTags = LayoutInflater.from(mContext) .inflate(R.layout.layout_hot_tags_item, flowLayout, false) as TextView mTags.text = listBean.tag_name // mTags.setOnClickListener{ TotalSearchActivity.startActivity(mContext, listBean.keyword)} return mTags } } } MulBangumiDetail.TYPE_RECOMMEND_HEAD//推荐头部 -> holder.setText(R.id.tv_title, "更多推荐") .setText(R.id.tv_online, "换一换") .setVisible(R.id.iv_trans, true) .setVisible(R.id.iv_arrow, false) MulBangumiDetail.TYPE_RECOMMEND_ITEM//推荐内容 -> { val recyclerRecommend = holder.getView(R.id.recycler) recyclerRecommend.setHasFixedSize(true) recyclerRecommend.isNestedScrollingEnabled = false val layoutManager = GridLayoutManager(mContext, 3) recyclerRecommend.layoutManager = layoutManager mulBangumiDetail.bangumiRecommendList?.let { recyclerRecommend.adapter = BangumiDetailRecommendAdapter(it.subList(0, 6)) } } MulBangumiDetail.TYPE_COMMENT_HEAD//评论头部 -> holder.setText(R.id.tv_title, SpanUtils() .append("评论 ") .append("第") .append("${mulBangumiDetail.num}") .append("话") .append("(${mulBangumiDetail.account})").setForegroundColor(AppUtils.getColor(R.color.black_alpha_30)) .create()) .setText(R.id.tv_online, "选集") MulBangumiDetail.TYPE_COMMENT_HOT_ITEM//热门评论 -> { mulBangumiDetail.hotsBean?.let { holder.setText(R.id.tv_uname, SpanUtils() .append(it.member.uname) .setForegroundColor(AppUtils.getColor(R.color.gray_20)) .appendSpace(10) .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER) .create()) .setText(R.id.tv_like, "${it.like}") .setText(R.id.tv_floor, "#${it.floor}") .setText(R.id.tv_time, TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong())) .setText(R.id.tv_message, it.content.message) .setText(R.id.tv_rcount, "共有${it.rcount}条回复 >") Glide.with(mContext) .load(it.member.avatar) .centerCrop() .placeholder(R.drawable.bili_default_avatar) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_avatar) as CircleImageView) } } MulBangumiDetail.TYPE_COMMENT_MORE//更多评论 -> { } MulBangumiDetail.TYPE_COMMENT_NOMAL_ITEM//普通评论 -> { mulBangumiDetail.repliesBean?.let { holder.setVisible(R.id.tv_rcount, false) .setText(R.id.tv_like, "${it.like}") .setText(R.id.tv_uname, SpanUtils() .append(it.member.uname) .setForegroundColor(AppUtils.getColor(R.color.gray_20)) .appendSpace(10) .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER) .create()) .setText(R.id.tv_floor, "#${it.floor}") .setText(R.id.tv_time, com.yoyiyi.soleil.utils.time.TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong())) .setText(R.id.tv_message, it.content.message) Glide.with(mContext) .load(it.member.avatar) .centerCrop() .placeholder(R.drawable.bili_default_avatar) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) } } } } private fun getIdRes(lv: Int): Int = when (lv) { 1 -> R.drawable.ic_lv1 2 -> R.drawable.ic_lv2 3 -> R.drawable.ic_lv3 4 -> R.drawable.ic_lv4 5 -> R.drawable.ic_lv5 6 -> R.drawable.ic_lv6 7 -> R.drawable.ic_lv7 8 -> R.drawable.ic_lv8 9 -> R.drawable.ic_lv9 else -> R.drawable.ic_lv0 } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailEpisodeAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.bangumi import android.content.Intent import android.view.View import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.bangumi.BangumiDetail import com.yoyiyi.soleil.module.app.video.VideoPlayerActivity /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/12 17:31 * * 描述: */ class BangumiDetailEpisodeAdapter(data: List?) : BaseQuickAdapter(R.layout.item_bangumi_detail_episodes, data) { private var mOldPos: Int = 0 private var mNewPos: Int = 0 override fun convert(holder: BaseViewHolder, episodesBean: BangumiDetail.EpisodesBean) { holder.setText(R.id.tv_index, "第${episodesBean.index}话") holder.setText(R.id.tv_index_title, episodesBean.index_title) holder.itemView.setOnClickListener { mNewPos = holder.adapterPosition//新位置 mOldPos = mNewPos notifyDataSetChanged() } if (holder.adapterPosition == mNewPos) { holder.getView(R.id.tv_index_title).isEnabled = true holder.getView(R.id.tv_index).isEnabled = true holder.getView(R.id.ll_root).isEnabled = true } else { holder.getView(R.id.tv_index_title).isEnabled = false holder.getView(R.id.tv_index).isEnabled = false holder.getView(R.id.ll_root).isEnabled = false } if (mNewPos != mOldPos) { holder.getView(R.id.tv_index_title).isEnabled = false holder.getView(R.id.tv_index).isEnabled = false holder.getView(R.id.ll_root).isEnabled = false } if (holder.adapterPosition == itemCount - 1) { holder.setVisible(R.id.space, true) } else { holder.setVisible(R.id.space, false) } //跳转到播放界面 holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoPlayerActivity::class.java)) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailRecommendAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.bangumi import android.content.Intent import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.bangumi.BangumiDetailRecommend import com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity import com.yoyiyi.soleil.utils.NumberUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/12 19:05 * * 描述: */ internal class BangumiDetailRecommendAdapter(data: List?) : BaseQuickAdapter(R.layout.item_bangumi_detail_recommend, data) { override fun convert(holder: BaseViewHolder, listBean: BangumiDetailRecommend.ListBean) { Glide.with(mContext) .load(listBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_follow, "${NumberUtils.format("${listBean.follow}")}追番") .setText(R.id.tv_video_title, listBean.title) holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailSeasonAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.bangumi import android.text.TextUtils import android.view.View import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.bangumi.BangumiDetail /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/12 17:31 * * 描述:分季 */ class BangumiDetailSeasonAdapter(data: List?, private val mSeasonTitle: String) : BaseQuickAdapter(R.layout.item_bangumi_detail_seasons, data) { private var mOldPos: Int = 0 private var mNewPos = -1 private var mFlag = true override fun convert(holder: BaseViewHolder, seasonsBean: BangumiDetail.SeasonsBean) { holder.setText(R.id.tv_index, seasonsBean.title) if (mFlag) { if (TextUtils.equals(seasonsBean.title, mSeasonTitle)) { mNewPos = holder.adapterPosition mOldPos = mNewPos mFlag = false } } holder.itemView.setOnClickListener { mNewPos = holder.adapterPosition//新位置 mOldPos = mNewPos notifyDataSetChanged() } if (holder.adapterPosition == mNewPos) { holder.getView(R.id.tv_index).isEnabled = true holder.getView(R.id.ll_root).isEnabled = true } else { holder.getView(R.id.tv_index).isEnabled = false holder.getView(R.id.ll_root).isEnabled = false } if (mNewPos != mOldPos) { holder.getView(R.id.tv_index).isEnabled = false holder.getView(R.id.ll_root).isEnabled = false } if (holder.adapterPosition == itemCount - 1) { holder.setVisible(R.id.space, true) } else { holder.setVisible(R.id.space, false) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiIndexSection.kt ================================================ package com.yoyiyi.soleil.adapter.bangumi import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.bangumi.BangumiIndex import com.yoyiyi.soleil.widget.section.StatelessSection import com.yoyiyi.soleil.widget.section.ViewHolder /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/9 16:19 * * 描述: */ class BangumiIndexSection(data: List) : StatelessSection(R.layout.layout_item_bangumi_index_head, R.layout.layout_item_bangumi_index_body, data) { override fun convert(holder: ViewHolder, categoryBean: BangumiIndex.CategoryBean, position: Int) { holder.setText(R.id.tv_title, categoryBean.tag_name) Glide.with(mContext) .load(categoryBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_icon)) } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiScheduleSection.kt ================================================ package com.yoyiyi.soleil.adapter.bangumi import android.content.Intent import android.content.res.ColorStateList import android.os.Build import android.support.annotation.RequiresApi import android.text.TextUtils import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.bangumi.BangumiSchedule import com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.widget.section.StatelessSection import com.yoyiyi.soleil.widget.section.ViewHolder import java.text.SimpleDateFormat import java.util.* /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/8 17:45 * * 描述: */ class BangumiScheduleSection(private val mWeek: String, list: List, private val mDate: String) : StatelessSection(R.layout.layout_item_bangumi_schedule_head, R.layout.layout_item_bangumi_schedule_body, list) { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) override fun onBindHeaderViewHolder(holder: ViewHolder) { when (mWeek) { "周一" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_1) "周二" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_2) "周三" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_3) "周四" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_4) "周五" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_5) "周六" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_6) "周日" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_7) } } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private fun setWeekData(holder: ViewHolder, iconRes: Int) { val nowDate = com.yoyiyi.soleil.utils.time.TimeUtils.getNowDate() val date2String = com.yoyiyi.soleil.utils.time.TimeUtils.date2String(nowDate, SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) if (TextUtils.equals(mDate, date2String /*TimeUtils.formatDate(TimeUtils.getCurrentTime("yyyy-MM-dd")))*/)) { holder.setText(R.id.tv_date, "今天") .setTextColor(R.id.tv_date, AppUtils.getColor(R.color.colorPrimary)) .setTextColor(R.id.tv_title, AppUtils.getColor(R.color.colorPrimary)) val icon = holder.getView(R.id.iv_icon) icon.imageTintList = ColorStateList.valueOf(AppUtils.getColor(R.color.colorPrimary)) } else { holder.setText(R.id.tv_date, mDate) .setTextColor(R.id.tv_date, AppUtils.getColor(R.color.black_alpha_30)) .setTextColor(R.id.tv_title, AppUtils.getColor(R.color.gray_80)) val icon = holder.getView(R.id.iv_icon) icon.imageTintList = ColorStateList.valueOf(AppUtils.getColor(R.color.gray_80)) } holder.setImageResource(R.id.iv_icon, iconRes) .setText(R.id.tv_title, mWeek) } override fun convert(holder: ViewHolder, schedule: BangumiSchedule, position: Int) { Glide.with(mContext) .load(schedule.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_title, schedule.title) .setText(R.id.tv_video_time, schedule.ontime) .setText(R.id.tv_video_update, "第 ${schedule.ep_index} 话") holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/ActivityCenterAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.discover import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.discover.ActivityCenter import com.yoyiyi.soleil.module.app.BrowerActivity /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/5 23:15 * * 描述:活动中心 */ class ActivityCenterAdapter(data: List?) : BaseQuickAdapter(R.layout.item_activity_center, data) { override fun convert(holder: BaseViewHolder, listBean: ActivityCenter.ListBean) { Glide.with(mContext) .load(listBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_preview)) holder.setText(R.id.tv_title, listBean.title).setImageResource(R.id.iv_state, if (listBean.state == 1) R.drawable.ic_badge_end else R.drawable.ic_badge_going) holder.itemView.setOnClickListener { BrowerActivity.startActivity(mContext, listBean.link, listBean.title, listBean.cover) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/GameCenterBookGiftAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.discover import android.widget.FrameLayout import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.discover.GameCenter import com.yoyiyi.soleil.module.app.BrowerActivity import com.yoyiyi.soleil.utils.AppUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/6 12:57 * * 描述: */ class GameCenterBookGiftAdapter(data: List?) : BaseQuickAdapter(R.layout.item_game_center_book_gift, data) { override fun convert(holder: BaseViewHolder, bookGiftBean: GameCenter.BookGiftBean) { holder.setText(R.id.tv_title, bookGiftBean.name) Glide.with(mContext) .load(bookGiftBean.image) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_preview)) holder.itemView.setOnClickListener { BrowerActivity.startActivity(mContext, bookGiftBean.link, bookGiftBean.name, bookGiftBean.image) } val position = holder.adapterPosition if (position == itemCount - 1) { val params = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.MATCH_PARENT) params.setMargins(AppUtils.getDimension(R.dimen.dp10).toInt(), AppUtils.getDimension(R.dimen.dp5).toInt(), AppUtils.getDimension(R.dimen.dp10).toInt(), AppUtils.getDimension(R.dimen.dp5).toInt()) holder.itemView.layoutParams = params } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/InterestAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.discover import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.RecyclerView import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.youth.banner.Banner import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.discover.MulInterest import com.yoyiyi.soleil.ext.startAnim import com.yoyiyi.soleil.module.app.BrowerActivity import com.yoyiyi.soleil.utils.TimeUtils import com.yoyiyi.soleil.widget.CircleImageView /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/10 22:45 * * 描述: */ class InterestAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulInterest.TYPE_BANNER, R.layout.layout_banner) addItemType(MulInterest.TYPE_CATEGRORY, R.layout.layout_item_interest_categroty) addItemType(MulInterest.TYPR_HEADER, R.layout.layout_item_interest_head) addItemType(MulInterest.TYPR_ITEM, R.layout.layout_item_interest_item) } override fun convert(holder: BaseViewHolder, mulInterest: MulInterest) { when (mulInterest.itemType) { MulInterest.TYPE_BANNER -> { val banner = holder.getView(R.id.banner) val adList = mulInterest.interestAdList?.result val urls = adList?.map({ bannerBean -> bannerBean.ads_image }) banner.startAnim(urls) banner.setOnBannerListener { i -> adList?.let { val interestAd = it[i] BrowerActivity.startActivity(mContext, interestAd.ads_image_link, interestAd.ads_title, interestAd.ads_image) } } } MulInterest.TYPE_CATEGRORY -> { val recyclerView = holder.getView(R.id.recycler) recyclerView.setHasFixedSize(false) recyclerView.isNestedScrollingEnabled = false val layoutManager = GridLayoutManager(mContext, 4) recyclerView.layoutManager = layoutManager recyclerView.adapter = IntersetCategroyAdapter(mulInterest.interestCategroryList) } MulInterest.TYPR_HEADER -> { } MulInterest.TYPR_ITEM -> { mulInterest.community?.let { Glide.with(mContext) .load(it.post_info.author_avatar) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_author_avatar)) holder.setText(R.id.tv_name, it.post_info.author_name) .setText(R.id.tv_summary, it.post_info.post_summary) .setText(R.id.tv_title, it.post_info.post_title) .setText(R.id.tv_group, "[${it.community_info.community_name}]") .setText(R.id.tv_time, TimeUtils.formatDate(com.yoyiyi.soleil.utils.time.TimeUtils.millis2String(it.post_info.post_time))) .setText(R.id.tv_img_count, "${it.post_info.image_count}") .setText(R.id.tv_reply_count, "${it.post_info.reply_count}") .setVisible(R.id.iv_image, it.post_info.image_count != 0) .setVisible(R.id.tv_img_count, it.post_info.image_count != 0) if (it.post_info.image_count != 0) { Glide.with(mContext) .load(it.post_info.post_image_list[0].image_url) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_image)) } } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/IntersetCategroyAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.discover import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.discover.InterestCategrory /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/6 12:57 * * 描述: */ class IntersetCategroyAdapter(data: List?) : BaseQuickAdapter(R.layout.item_interest_category, data) { override fun convert(holder: BaseViewHolder, interestCategrory: InterestCategrory.ResultBean) { Glide.with(mContext) .load(interestCategrory.avatar) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_icon)) holder.setText(R.id.tv_title, interestCategrory.name) } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/TopicCenterAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.discover import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.discover.TopicCenter import com.yoyiyi.soleil.module.app.BrowerActivity /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/5 23:15 * * 描述:话题中心 */ class TopicCenterAdapter(data: List?) : BaseQuickAdapter(R.layout.item_topic_center, data) { override fun convert(holder: BaseViewHolder, listBean: TopicCenter.ListBean) { Glide.with(mContext) .load(listBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_preview)) holder.setText(R.id.tv_title, listBean.title) holder.itemView.setOnClickListener { BrowerActivity.startActivity(mContext, listBean.link, listBean.title, listBean.cover) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/section/GameCenterBookGiftSection.kt ================================================ package com.yoyiyi.soleil.adapter.discover.section import android.support.v7.widget.RecyclerView import android.support.v7.widget.StaggeredGridLayoutManager import com.yoyiyi.soleil.R import com.yoyiyi.soleil.adapter.discover.GameCenterBookGiftAdapter import com.yoyiyi.soleil.bean.discover.GameCenter import com.yoyiyi.soleil.widget.section.StatelessSection import com.yoyiyi.soleil.widget.section.ViewHolder /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/5/30 21:44 * * 描述:新游预约 */ class GameCenterBookGiftSection(private val list: List) : StatelessSection(R.layout.layout_item_game_center_head, R.layout.layout_item_game_center_book_gift, R.layout.layout_empty) { override fun onBindHeaderViewHolder(holder: ViewHolder) { holder.setText(R.id.tv_title, "新游预约") } override fun onBindFooterViewHolder(holder: ViewHolder) { val recyclerView = holder.getView(R.id.recycler) recyclerView.setHasFixedSize(true) recyclerView.isNestedScrollingEnabled = false val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL) recyclerView.layoutManager = layoutManager recyclerView.adapter = GameCenterBookGiftAdapter(list) } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/section/GameCenterGameListSection.kt ================================================ package com.yoyiyi.soleil.adapter.discover.section import android.content.Intent import android.view.View import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.discover.GameCenter import com.yoyiyi.soleil.module.discover.AllGameActivity import com.yoyiyi.soleil.widget.section.StatelessSection import com.yoyiyi.soleil.widget.section.ViewHolder /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/5/30 21:44 * * 描述:精品推荐游戏 */ class GameCenterGameListSection(private val mFlag: Boolean, data: List) : StatelessSection(R.layout.layout_item_game_center_head, R.layout.layout_item_game_center_footer, R.layout.layout_item_game_center_body, data) { override fun convert(holder: ViewHolder, gameListBean: GameCenter.GameListBean, position: Int) { Glide.with(mContext) .load(gameListBean.icon) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_preview) as ImageView) holder.setText(R.id.tv_title, gameListBean.title) .setText(R.id.tv_des, gameListBean.summary) if (gameListBean.hot == 1) { holder.setImageResource(R.id.iv_state, R.drawable.ic_game_center_hot) } else if (gameListBean.new == 1) { holder.setImageResource(R.id.iv_state, R.drawable.ic_game_center_new) } else { holder.setImageResource(R.id.iv_state, R.color.transparent) } } override fun onBindHeaderViewHolder(holder: ViewHolder) { if (mFlag) { holder.setText(R.id.tv_title, "精品推荐游戏") } else { gone(holder.itemView) } } override fun onBindFooterViewHolder(holder: ViewHolder) { if (mFlag) { holder.itemView.visibility = View.VISIBLE holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, AllGameActivity::class.java)) } } else { gone(holder.itemView) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/discover/section/GameCenterUserSection.kt ================================================ package com.yoyiyi.soleil.adapter.discover.section import com.yoyiyi.soleil.R import com.yoyiyi.soleil.widget.section.StatelessSection /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/5/30 21:44 * * 描述:用户 */ class GameCenterUserSection : StatelessSection(R.layout.layout_item_game_center_user) ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/ChaseFllowAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.content.Intent import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.chase.ChaseBangumi import com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.SpanUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/7 23:28 * * 描述: */ class ChaseFllowAdapter(data: List?) : BaseQuickAdapter(R.layout.item_home_chase_body, data) { override fun convert(holder: BaseViewHolder, followsBean: ChaseBangumi.Follows) { Glide.with(mContext) .load(followsBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_title, followsBean.title)// holder.setText(R.id.tv_video_update, SpanUtils() .append("更新至第 ${followsBean.new_ep.index} 话") .setForegroundColor(AppUtils.getColor(R.color.pink_text_color)).create()) holder.setText(R.id.tv_video_state, "尚未观看") holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/ChaseRecommendCNAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.content.Intent import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.chase.RecommendBangumi import com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity import com.yoyiyi.soleil.utils.NumberUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/7 23:31 * * 描述: */ class ChaseRecommendCNAdapter(data: List?) : BaseQuickAdapter(R.layout.item_home_chase_body, data) { override fun convert(holder: BaseViewHolder, recommendBean: RecommendBangumi.RecommendCn.Recommend) { Glide.with(mContext) .load(recommendBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_follow, "${NumberUtils.format(recommendBean.favourites)}人追番") .setText(R.id.tv_video_title, recommendBean.title) .setText(R.id.tv_video_update, "更新至第 ${recommendBean.newest_ep_index} 话") .setVisible(R.id.tv_video_state, false) holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/ChaseRecommendJPAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.content.Intent import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.chase.RecommendBangumi import com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity import com.yoyiyi.soleil.utils.NumberUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/7 23:31 * * 描述: */ class ChaseRecommendJPAdapter(data: List?) : BaseQuickAdapter(R.layout.item_home_chase_body, data) { override fun convert(holder: BaseViewHolder, recommendBean: RecommendBangumi.RecommendJp.Recommend) { Glide.with(mContext) .load(recommendBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview) ) holder.setText(R.id.tv_video_follow, "${NumberUtils.format(recommendBean.favourites)}人追番") .setText(R.id.tv_video_title, recommendBean.title) .setText(R.id.tv_video_update, "更新至第 ${recommendBean.newest_ep_index} 话") .setVisible(R.id.tv_video_state, false) holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/DynamicAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.content.Intent import android.widget.ImageView import android.widget.RelativeLayout import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.dynamic.MulDynamic import com.yoyiyi.soleil.module.app.video.VideoDetailActivity import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.NumberUtils import com.yoyiyi.soleil.utils.time.FormatUtils import com.yoyiyi.soleil.utils.time.TimeUtils import com.yoyiyi.soleil.widget.CircleImageView /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/6/13 16:09 * * 描述:动态Adapter */ class DynamicAdapter(data: List?) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulDynamic.TYPE_LV0, R.layout.item_home_dynamic) addItemType(MulDynamic.TYPE_LV1, R.layout.item_home_dynamic) } override fun convert(holder: BaseViewHolder, mulDynamic: MulDynamic) { holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) } when (holder.itemViewType) { MulDynamic.TYPE_LV0 -> { val itemBean = mulDynamic.group holder.setVisible(R.id.fl_recent, itemBean?.isRecent == 1) holder.getView(R.id.fl_recent) .setOnClickListener { mulDynamic.flag = false val pos = holder.adapterPosition notifyItemChanged(pos) expand(pos, false) } if (mulDynamic.flag) { holder.setVisible(R.id.fl_recent, true) holder.setText(R.id.tv_recent, "还有${itemBean?.recent_count}个视频被隐藏") } else { holder.setVisible(R.id.fl_recent, false) } when (itemBean?.type) { 0//关注up -> { holder.setVisible(R.id.iv_avatar, true) .setVisible(R.id.tv_tag, false) .setVisible(R.id.tv_title_time, true) .setVisible(R.id.tv_title_tag_time, false) .setVisible(R.id.tv_title, true) .setText(R.id.tv_title_time, TimeUtils.getFriendlyTimeSpanByNow((itemBean.ctime * Math.pow(10.0, 3.0)).toLong())) .setText(R.id.tv_title, itemBean.name) .setText(R.id.tv_video_title, itemBean.title) .setText(R.id.tv_duration, FormatUtils.formatDuration("${itemBean.duration}")) .setVisible(R.id.tv_duration, true) .setVisible(R.id.iv_video_play_num, true) .setVisible(R.id.tv_video_play_num, true) .setVisible(R.id.tv_video_favourite, true) .setVisible(R.id.iv_video_online_region, true) .setText(R.id.tv_video_play_num, " " + NumberUtils.format(itemBean.play.toString() + "")) .setText(R.id.tv_video_favourite, " " + NumberUtils.format(itemBean.favorite.toString() + "")) .setVisible(R.id.iv_tag_video_play_num, false) .setVisible(R.id.tv_tag_video_favourite, false) .setVisible(R.id.iv_tag_video_online_region, false) .setText(R.id.tv_tag_video_play_num, "${itemBean.name}${itemBean.tag.let { "·${it.tag_name}" }}") Glide.with(mContext) .load(itemBean.face) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_avatar) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) Glide.with(mContext) .load(itemBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_preview)) } 2//国产动画 -> { holder.setVisible(R.id.iv_avatar, false) .setVisible(R.id.tv_title, false) .setVisible(R.id.tv_title_time, false) .setVisible(R.id.tv_title_tag_time, true).setVisible(R.id.tv_duration, false) .setText(R.id.tv_title_tag_time, TimeUtils.getFriendlyTimeSpanByNow((itemBean.ctime.times(Math.pow(10.0, 3.0))).toLong())) .setVisible(R.id.tv_tag, true) .setText(R.id.tv_tag, "国产动画") .setBackgroundColor(R.id.tv_tag, AppUtils.getColor(R.color.yellow_30)) .setText(R.id.tv_video_title, itemBean.title) .setVisible(R.id.iv_video_play_num, false) .setVisible(R.id.tv_video_play_num, true) .setVisible(R.id.tv_video_favourite, false) .setVisible(R.id.iv_video_online_region, false) .setText(R.id.tv_video_play_num, "第${itemBean.index}话${itemBean.index_title}") .setText(R.id.tv_tag_video_play_num, NumberUtils.format("${itemBean.play}")) .setVisible(R.id.iv_tag_video_play_num, true) .setVisible(R.id.tv_tag_video_play_num, true) .setVisible(R.id.iv_tag_video_online_region, true) .setVisible(R.id.tv_tag_video_favourite, true) .setText(R.id.tv_tag_video_favourite, NumberUtils.format("${itemBean.danmaku}")) Glide.with(mContext) .load(itemBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_preview)) } 1//可能是番剧 不知道参数意思 -> { holder.setVisible(R.id.iv_avatar, false) .setVisible(R.id.tv_tag, true) .setVisible(R.id.tv_title, false) .setVisible(R.id.tv_title_time, false) .setVisible(R.id.tv_title_tag_time, true) .setVisible(R.id.tv_duration, false) .setText(R.id.tv_title_tag_time, TimeUtils.getFriendlyTimeSpanByNow((itemBean.ctime.times(Math.pow(10.0, 3.0))).toLong())) .setText(R.id.tv_tag, "番剧") .setBackgroundColor(R.id.tv_tag, AppUtils.getColor(R.color.pink_text_color)) .setText(R.id.tv_video_title, itemBean.title) .setVisible(R.id.iv_video_play_num, false) .setVisible(R.id.tv_video_play_num, true) .setVisible(R.id.tv_video_favourite, false) .setVisible(R.id.iv_video_online_region, false) .setText(R.id.tv_video_play_num, "第${itemBean.index}话${itemBean.index_title}") .setText(R.id.tv_tag_video_play_num, NumberUtils.format("${itemBean.play}")) .setVisible(R.id.iv_tag_video_play_num, true) .setVisible(R.id.tv_tag_video_play_num, true) .setVisible(R.id.iv_tag_video_online_region, true) .setVisible(R.id.tv_tag_video_favourite, true) .setText(R.id.tv_tag_video_favourite, NumberUtils.format("${itemBean.danmaku}")) Glide.with(mContext) .load(itemBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_preview)) } } } MulDynamic.TYPE_LV1 -> { mulDynamic.recent?.let { holder.setVisible(R.id.iv_avatar, true) .setVisible(R.id.tv_tag, false) .setText(R.id.tv_title, it.name) .setText(R.id.tv_title_time, TimeUtils.getFriendlyTimeSpanByNow((it.ctime.times(Math.pow(10.0, 3.0))).toLong())) .setVisible(R.id.fl_recent, false) .setText(R.id.tv_video_title, it.title) .setText(R.id.tv_duration, FormatUtils.formatDuration("${it.duration}")) .setVisible(R.id.tv_duration, true) .setVisible(R.id.iv_video_play_num, true) .setVisible(R.id.tv_video_play_num, true) .setVisible(R.id.tv_video_favourite, true) .setVisible(R.id.iv_video_online_region, true) .setText(R.id.tv_video_play_num, " " + NumberUtils.format("${it.play}")) .setText(R.id.tv_video_favourite, " " + NumberUtils.format("${it.favorite}")) .setVisible(R.id.iv_tag_video_play_num, false) .setVisible(R.id.tv_tag_video_favourite, false) .setVisible(R.id.iv_tag_video_online_region, false) .setText(R.id.tv_tag_video_play_num, "${it.name}${it.tag.let { "·${it.tag_name}" }}") Glide.with(mContext) .load(it.face) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_avatar) .dontAnimate() .into(holder.getView(R.id.iv_avatar)) Glide.with(mContext) .load(it.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_preview)) } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/MainAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentPagerAdapter import com.yoyiyi.soleil.R import com.yoyiyi.soleil.module.home.* import com.yoyiyi.soleil.utils.AppUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * @date 创建时间:2017/5/23 18:25 * 描述:主页Tag */ class MainAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) { private val mTitle = AppUtils.getStringArray(R.array.main_title) private val mFragment = arrayOfNulls(mTitle.size) override fun getItem(position: Int): Fragment? { if (mFragment[position] == null) { when (position) { 0 -> //直播 mFragment[position] = LiveFragment.newInstance() 1 -> //推荐 mFragment[position] = RecommendFragment.newInstance() 2 -> //追番 mFragment[position] = ChaseBangumiFragment.newInstance() 3 -> //分区 mFragment[position] = RegionFragment.newInstance() 4 -> //动态 mFragment[position] = DynamicFragment.newInstance() 5 -> //发现 mFragment[position] = DiscoverFragment.newInstance() } } return mFragment[position] } override fun getCount(): Int = mTitle.size override fun getPageTitle(position: Int): CharSequence = mTitle[position] } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/RecommendAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.content.Intent import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.youth.banner.Banner import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.recommend.MulRecommend import com.yoyiyi.soleil.bean.recommend.Recommend import com.yoyiyi.soleil.ext.startAnim import com.yoyiyi.soleil.module.app.BrowerActivity import com.yoyiyi.soleil.module.app.video.VideoDetailActivity import com.yoyiyi.soleil.utils.NumberUtils import com.yoyiyi.soleil.utils.time.FormatUtils /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/5/31 11:28 * * 描述:推荐Adapter */ class RecommendAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulRecommend.TYPE_HEADER, R.layout.layout_recommend_banner) addItemType(MulRecommend.TYPE_ITEM, R.layout.layout_item_home_recommend_body) } override fun convert(holder: BaseViewHolder, mulRecommend: MulRecommend) { when (holder.itemViewType) { MulRecommend.TYPE_HEADER -> { val banner = holder.getView(R.id.banner) val banner_item = mulRecommend.data val urls = banner_item?.map(Recommend.BannerItem::image) banner.startAnim(urls) banner.setOnBannerListener { val i = it banner_item?.let { val bannerBean = it[i] BrowerActivity.startActivity(mContext, bannerBean.uri, bannerBean.title, bannerBean.image) } } } MulRecommend.TYPE_ITEM -> { Glide.with(mContext) .load(mulRecommend.recommend?.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_play_num, NumberUtils.format("${mulRecommend.recommend?.play}")) .setText(R.id.tv_video_time, FormatUtils.formatDuration("${mulRecommend.recommend?.duration}")) .setText(R.id.tv_video_danmaku, NumberUtils.format("${mulRecommend.recommend?.danmaku}")) .setText(R.id.tv_video_title, mulRecommend.recommend?.title) if (mulRecommend.recommend?.open != 0) { //直播 holder.setText(R.id.tv_video_tag, mulRecommend.recommend?.area) } else { //推荐 holder.setText(R.id.tv_video_tag, "${mulRecommend.recommend?.tname}·${mulRecommend.recommend?.tag?.tag_name}") } holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) } } } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/RegionActivityCenterAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.region.Region /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/5/27 16:06 * * 描述: 分区界面活动中心 */ class RegionActivityCenterAdapter(data: List?) : BaseQuickAdapter(R.layout.item_home_region_activity_center, data) { override fun convert(holder: BaseViewHolder, bodyBean: Region.Body) { Glide.with(mContext) .load(bodyBean.cover) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_title, bodyBean.title) val position = holder.adapterPosition if (position == itemCount - 1) { holder.setVisible(R.id.space, true) } else { holder.setVisible(R.id.space, false) } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/RegionEntranceAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home import android.content.Intent import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.region.RegionEnter import com.yoyiyi.soleil.bean.region.RegionTagType import com.yoyiyi.soleil.module.region.AdActivity import com.yoyiyi.soleil.module.region.RegionTypeActivity /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * * @date 创建时间:2017/5/23 23:30 * * 描述: */ class RegionEntranceAdapter(data: List?, private val regionTypeList: List) : BaseQuickAdapter(R.layout.item_home_region_entrance, data) { override fun convert(helper: BaseViewHolder, item: RegionEnter) { helper.setText(R.id.tv_title, item.title) .setImageResource(R.id.iv_icon, item.img) helper.itemView.setOnClickListener { when (helper.adapterPosition) { 0//直播 -> { } 1 -> RegionTypeActivity.startActivity(mContext, regionTypeList[1]) 2 -> RegionTypeActivity.startActivity(mContext, regionTypeList[2]) 3//国创 -> { } 4 -> RegionTypeActivity.startActivity(mContext, regionTypeList[3]) 5 -> RegionTypeActivity.startActivity(mContext, regionTypeList[4]) 6 -> RegionTypeActivity.startActivity(mContext, regionTypeList[5]) 7 -> RegionTypeActivity.startActivity(mContext, regionTypeList[6]) 8 -> RegionTypeActivity.startActivity(mContext, regionTypeList[7]) 9 -> RegionTypeActivity.startActivity(mContext, regionTypeList[8]) 10 -> RegionTypeActivity.startActivity(mContext, regionTypeList[9]) 11//广告 -> mContext.startActivity(Intent(mContext, AdActivity::class.java)) 12 -> RegionTypeActivity.startActivity(mContext, regionTypeList[10]) 13 -> RegionTypeActivity.startActivity(mContext, regionTypeList[11]) 14 -> RegionTypeActivity.startActivity(mContext, regionTypeList[12]) 15 ->{ } //游戏中心 // mContext.startActivity(Intent(mContext, GameCenterActivity::class.java)) }//LiveRegionActivity.startActivity(mContext); //RegionTypeActivity.startActivity(mContext, mRegionTypeList.get(0)); // RegionTypeActivity.startActivity(mContext, mRegionTypeList.get(1), "国创"); } } } ================================================ FILE: app/src/main/java/com/yoyiyi/soleil/adapter/home/live/LiveAdapter.kt ================================================ package com.yoyiyi.soleil.adapter.home.live import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.RecyclerView import android.view.animation.LinearInterpolator import android.widget.Button import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.youth.banner.Banner import com.yoyiyi.soleil.R import com.yoyiyi.soleil.bean.live.MulLive import com.yoyiyi.soleil.bean.live.support.LiveEnter import com.yoyiyi.soleil.ext.startAnim import com.yoyiyi.soleil.module.app.BrowerActivity import com.yoyiyi.soleil.utils.AppUtils import com.yoyiyi.soleil.utils.SpanUtils import java.util.* /** * @author zzq 作者 E-mail: soleilyoyiyi@gmail.com * * @date 创建时间:2017/6/7 11:38 * 描述:直播界面的Adapter */ class LiveAdapter(data: List) : BaseMultiItemQuickAdapter(data) { init { addItemType(MulLive.TYPE_BANNER, R.layout.layout_banner) addItemType(MulLive.TYPE_ENTRANCE, R.layout.layout_item_home_live_entrance) addItemType(MulLive.TYPR_HEADER, R.layout.layout_item_home_live_head) addItemType(MulLive.TYPE_RECOMMEND_ITEM, R.layout.common_item_recycler) addItemType(MulLive.TYPE_RECOMMEND_BANNER, R.layout.layout_item_home_live_body) addItemType(MulLive.TYPE_PARTY_ITEM, R.layout.common_item_recycler) addItemType(MulLive.TYPE_FOOTER, R.layout.layout_item_home_live_footer) } override fun convert(holder: BaseViewHolder, mulLive: MulLive) { when (holder.itemViewType) { MulLive.TYPE_BANNER -> { val banner = holder.getView(R.id.banner) val bannerBeanList = mulLive.bannerBeanList val urls = bannerBeanList?.map({ (img) -> img }) banner.startAnim(urls) banner?.setOnBannerListener { i -> val bannerBean = bannerBeanList?.get(i) BrowerActivity.startActivity(mContext, bannerBean?.link ?: "", bannerBean?.title ?: "", bannerBean?.img ?: "") } } MulLive.TYPE_ENTRANCE -> { val liveEnterList = initEntrance() val recyclerView = holder.getView(R.id.recycler) recyclerView.setHasFixedSize(false) recyclerView.isNestedScrollingEnabled = false val layoutManager = GridLayoutManager(mContext, 5) recyclerView.layoutManager = layoutManager recyclerView.adapter = LiveEntranceAdapter(liveEnterList) } MulLive.TYPE_RECOMMEND_BANNER -> { val bannerDataBean = mulLive.bannerData Glide.with(mContext) .load(bannerDataBean?.cover?.src) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(R.drawable.bili_default_image_tv) .dontAnimate() .into(holder.getView(R.id.iv_video_preview)) holder.setText(R.id.tv_video_live_up, bannerDataBean?.owner?.name ?: "未知")//up .setText(R.id.tv_video_online, "${bannerDataBean?.online}")//在线人数; holder.setText(R.id.tv_video_title, SpanUtils() .append("#${bannerDataBean?.area}#") .append("${bannerDataBean?.title}") .setForegroundColor(AppUtils.getColor(R.color.pink_text_color)) .create()) } MulLive.TYPR_HEADER -> { Glide.with(mContext) .load(mulLive.url) .centerCrop() .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .into(holder.getView(R.id.iv_icon)) holder.setText(R.id.tv_title, mulLive.title) holder.setText(R.id.tv_online, SpanUtils() .append("当前") .append("${mulLive.count}") .setForegroundColor(AppUtils.getColor(R.color.pink_text_color)) .append("个直播") .create()) } MulLive.TYPE_RECOMMEND_ITEM -> { val recyclerView = holder.getView(R.id.recycler) recyclerView.setHasFixedSize(false) recyclerView.isNestedScrollingEnabled = false val layoutManager = GridLayoutManager(mContext, 2) recyclerView.layoutManager = layoutManager recyclerView.adapter = LiveRecommendAdapter(mulLive.recommendLives!!) } MulLive.TYPE_PARTY_ITEM -> { val recyclerView = holder.getView(R.id.recycler) recyclerView.setHasFixedSize(false) recyclerView.isNestedScrollingEnabled = false val layoutManager = GridLayoutManager(mContext, 2) recyclerView.layoutManager = layoutManager recyclerView.adapter = LivePartitionAdapter(mulLive.partityLives!!) } MulLive.TYPE_FOOTER -> { val random = Random() mulLive.hasMore?.let { if (it) { holder.setVisible(R.id.bt_more_live, true) } else { holder.setVisible(R.id.bt_more_live, false) holder.getView