From 2c0420f3a015330b46637d8b728615c52d3cdb7d Mon Sep 17 00:00:00 2001 From: Chris Zhao Date: Thu, 15 Dec 2016 22:48:10 +0100 Subject: [PATCH 1/9] Updated gradle, tool, sdk etc. --- app/build.gradle | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c6d54d0..468a1d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'realm-android' android { compileSdkVersion 24 - buildToolsVersion "24.0.1" + buildToolsVersion '25.0.0' defaultConfig { applicationId "com.codeest.geeknews" diff --git a/build.gradle b/build.gradle index 9ad36d4..2bda288 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0-rc1' + classpath 'com.android.tools.build:gradle:2.3.0-alpha3' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath "io.realm:realm-gradle-plugin:1.1.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 04e285f..8f0c945 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Dec 28 10:00:20 PST 2015 +#Thu Dec 15 22:39:13 CET 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.2-all.zip From bba3e3beb2bd89799d7ee165634621188796865f Mon Sep 17 00:00:00 2001 From: Chris Zhao Date: Thu, 15 Dec 2016 22:56:37 +0100 Subject: [PATCH 2/9] Update support libs, target, build-tool --- app/build.gradle | 18 +++++++++++------- app/src/main/res/values/colors.xml | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 468a1d4..1b86010 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,12 +4,12 @@ apply plugin: 'realm-android' android { compileSdkVersion 24 - buildToolsVersion '25.0.0' + buildToolsVersion '25.0.1' defaultConfig { applicationId "com.codeest.geeknews" minSdkVersion 21 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 2 versionName "1.0.1" } @@ -28,16 +28,20 @@ android { } } +ext { + appCompat = "25.0.1" +} + dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/tbs_sdk_thirdapp_v2.2.0.1096_36549_sharewithdownload_withoutGame_obfs_20160830_211645.jar') testCompile 'junit:junit:4.12' //ui - compile 'com.android.support:appcompat-v7:24.1.1' - compile 'com.android.support:design:24.1.1' - compile 'com.android.support:recyclerview-v7:24.1.1' - compile 'com.android.support:cardview-v7:24.1.1' + compile "com.android.support:recyclerview-v7:${appCompat}" + compile "com.android.support:appcompat-v7:${appCompat}" + compile "com.android.support:cardview-v7:${appCompat}" + compile "com.android.support:design:${appCompat}" //rx compile 'io.reactivex:rxjava:1.1.0' @@ -45,7 +49,7 @@ dependencies { compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' //network - compile 'com.google.code.gson:gson:2.4' + compile 'com.google.code.gson:gson:2.7' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a92c42f..668fab5 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,6 +6,7 @@ #EEEEEE #FFFFFF #2C2C2C + #80303F9F #FF4081 #6e000000 From 7a4622c8b61163a6eb2ea30969c5656d761fa02a Mon Sep 17 00:00:00 2001 From: Chris Zhao Date: Fri, 16 Dec 2016 13:04:41 +0100 Subject: [PATCH 3/9] Update comileSdkVersion --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 1b86010..fc94264 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'android-apt' apply plugin: 'realm-android' android { - compileSdkVersion 24 + compileSdkVersion 25 buildToolsVersion '25.0.1' defaultConfig { From 44a88d5177066a880ad52cf81f704e45f5cf0a6b Mon Sep 17 00:00:00 2001 From: Chris Zhao Date: Fri, 16 Dec 2016 13:39:59 +0100 Subject: [PATCH 4/9] Updated opacapp(lib) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index fc94264..76e8bef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { //widget compile 'com.victor:lib:1.0.4' compile 'com.prolificinteractive:material-calendarview:1.4.0' - compile 'net.opacapp:multiline-collapsingtoolbar:1.2.2' + compile 'net.opacapp:multiline-collapsingtoolbar:1.3.1' compile 'com.github.chrisbanes:PhotoView:1.3.0' compile 'com.miguelcatalan:materialsearchview:1.4.0' From 689b2ab25f81aa42450c7dffe10a12deca7b4a84 Mon Sep 17 00:00:00 2001 From: Chris Zhao Date: Fri, 16 Dec 2016 13:55:22 +0100 Subject: [PATCH 5/9] Add ripple for cardviews --- .../res/drawable/selector_item_background.xml | 10 ++++++++++ app/src/main/res/layout/item_comment.xml | 17 +++++++++-------- app/src/main/res/layout/item_daily.xml | 1 + app/src/main/res/layout/item_girl.xml | 1 + app/src/main/res/layout/item_like_article.xml | 1 + app/src/main/res/layout/item_like_girl.xml | 1 + app/src/main/res/layout/item_section.xml | 1 + app/src/main/res/layout/item_tech.xml | 1 + app/src/main/res/layout/item_theme.xml | 1 + 9 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/drawable/selector_item_background.xml diff --git a/app/src/main/res/drawable/selector_item_background.xml b/app/src/main/res/drawable/selector_item_background.xml new file mode 100644 index 0000000..03633b5 --- /dev/null +++ b/app/src/main/res/drawable/selector_item_background.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_comment.xml b/app/src/main/res/layout/item_comment.xml index 202b963..6e8a8d8 100644 --- a/app/src/main/res/layout/item_comment.xml +++ b/app/src/main/res/layout/item_comment.xml @@ -1,17 +1,18 @@ + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/selector_item_background" + android:orientation="horizontal" + android:paddingLeft="12dp" + android:paddingRight="12dp" + android:paddingTop="12dp"> + android:layout_height="@dimen/comment_face_size" + android:layout_marginEnd="10dp"/> diff --git a/app/src/main/res/layout/item_tech.xml b/app/src/main/res/layout/item_tech.xml index f508a4e..36f1766 100644 --- a/app/src/main/res/layout/item_tech.xml +++ b/app/src/main/res/layout/item_tech.xml @@ -9,6 +9,7 @@ android:id="@+id/cv_tech_content" android:layout_width="match_parent" android:layout_height="wrap_content" + android:foreground="@drawable/selector_item_background" android:transitionName="shareView" app:cardBackgroundColor="@color/colorCard" app:cardElevation="2dp" diff --git a/app/src/main/res/layout/item_theme.xml b/app/src/main/res/layout/item_theme.xml index ce68c7f..9c63e83 100644 --- a/app/src/main/res/layout/item_theme.xml +++ b/app/src/main/res/layout/item_theme.xml @@ -7,6 +7,7 @@ Date: Fri, 16 Dec 2016 14:16:26 +0100 Subject: [PATCH 6/9] Update gradle-build-tool --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2bda288..be55d51 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0-alpha3' + classpath 'com.android.tools.build:gradle:2.3.0-beta1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath "io.realm:realm-gradle-plugin:1.1.1" From e9536dd35eae86cd962380ad2c287c986074f7f2 Mon Sep 17 00:00:00 2001 From: Chris Zhao Date: Fri, 16 Dec 2016 22:48:24 +0100 Subject: [PATCH 7/9] Fixed image returns to thumbnail position. --- .../java/com/codeest/geeknews/app/App.java | 3 +- .../codeest/geeknews/base/BaseActivity.java | 10 +++++ .../ui/zhihu/activity/CalendarActivity.java | 3 +- .../ui/zhihu/activity/SectionActivity.java | 28 ++++++++++-- .../ui/zhihu/activity/ThemeActivity.java | 28 ++++++++++-- .../zhihu/activity/ZhihuDetailActivity.java | 12 ++++- .../ui/zhihu/adapter/DailyAdapter.java | 15 +++++-- .../geeknews/ui/zhihu/adapter/HotAdapter.java | 14 ++++-- .../ui/zhihu/adapter/SectionChildAdapter.java | 28 +++++++----- .../ui/zhihu/adapter/ThemeChildAdapter.java | 45 ++++++++++++------- .../ui/zhihu/fragment/DailyFragment.java | 37 +++++++++++---- .../ui/zhihu/fragment/HotFragment.java | 29 +++++++++--- .../main/res/layout/activity_zhihu_detail.xml | 1 - app/src/main/res/layout/fragment_daily.xml | 2 +- app/src/main/res/layout/fragment_hot.xml | 2 +- app/src/main/res/layout/item_daily.xml | 1 - .../res/transition/platform_transition.xml | 7 +++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 14 +++++- 19 files changed, 216 insertions(+), 64 deletions(-) create mode 100644 app/src/main/res/transition/platform_transition.xml diff --git a/app/src/main/java/com/codeest/geeknews/app/App.java b/app/src/main/java/com/codeest/geeknews/app/App.java index 42c6c6a..776a334 100755 --- a/app/src/main/java/com/codeest/geeknews/app/App.java +++ b/app/src/main/java/com/codeest/geeknews/app/App.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.app.Application; import android.content.Context; +import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatDelegate; import android.util.DisplayMetrics; import android.view.Display; @@ -93,7 +94,7 @@ public void exitApp() { if (allActivities != null) { synchronized (allActivities) { for (Activity act : allActivities) { - act.finish(); + ActivityCompat.finishAfterTransition(act); } } } diff --git a/app/src/main/java/com/codeest/geeknews/base/BaseActivity.java b/app/src/main/java/com/codeest/geeknews/base/BaseActivity.java index 981832c..0745b91 100755 --- a/app/src/main/java/com/codeest/geeknews/base/BaseActivity.java +++ b/app/src/main/java/com/codeest/geeknews/base/BaseActivity.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.Toolbar; import android.view.View; @@ -100,6 +101,15 @@ public void useNightMode(boolean isNight) { recreate(); } + @Override + public void onBackPressedSupport() { + if (getSupportFragmentManager().getBackStackEntryCount() > 1) { + pop(); + } else { + ActivityCompat.finishAfterTransition(this); + } + } + protected abstract void initInject(); protected abstract int getLayout(); protected abstract void initEventAndData(); diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/CalendarActivity.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/CalendarActivity.java index 7c57eec..a5002de 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/CalendarActivity.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/CalendarActivity.java @@ -1,6 +1,7 @@ package com.codeest.geeknews.ui.zhihu.activity; import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; import android.support.v7.widget.Toolbar; import com.codeest.geeknews.R; @@ -54,6 +55,6 @@ public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull Calend @OnClick(R.id.tv_calender_enter) void chooseDate() { RxBus.getDefault().post(mDate); - finish(); + ActivityCompat.finishAfterTransition(this); } } diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/SectionActivity.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/SectionActivity.java index 3eddd2c..d99b1b7 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/SectionActivity.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/SectionActivity.java @@ -1,7 +1,9 @@ package com.codeest.geeknews.ui.zhihu.activity; -import android.app.ActivityOptions; import android.content.Intent; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -43,6 +45,8 @@ public class SectionActivity extends BaseActivity impleme int id; String title; + private int position = -1; + @Override protected void initInject() { getActivityComponent().inject(this); @@ -74,14 +78,16 @@ public void onRefresh() { public void OnItemClick(int position, View shareView) { mPresenter.insertReadToDB(mList.get(position).getId()); mAdapter.setReadState(position, true); - mAdapter.notifyItemChanged(position); + SectionActivity.this.position = position; Intent intent = new Intent(); intent.setClass(mContext, ZhihuDetailActivity.class); intent.putExtra("id", mList.get(position).getId()); + String transitionSharedItemName = ViewCompat.getTransitionName(shareView); + intent.putExtra("shared-item-name", transitionSharedItemName); if (shareView != null) { - mContext.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(mContext, shareView, "shareView").toBundle()); + ActivityCompat.startActivity(SectionActivity.this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, shareView, transitionSharedItemName).toBundle()); } else { - startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(mContext).toBundle()); + ActivityCompat.startActivity(SectionActivity.this, intent, ActivityOptionsCompat.makeBasic().toBundle()); } } }); @@ -89,6 +95,20 @@ public void OnItemClick(int position, View shareView) { viewLoading.start(); } + @Override + protected void onResume() { + super.onResume(); + if (mAdapter != null && position > 0) { + mAdapter.notifyItemChanged(position); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + position = -1; + } + @Override public void showContent(SectionChildListBean sectionChildListBean) { if(swipeRefresh.isRefreshing()) { diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ThemeActivity.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ThemeActivity.java index 3678a04..779b5f6 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ThemeActivity.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ThemeActivity.java @@ -1,7 +1,9 @@ package com.codeest.geeknews.ui.zhihu.activity; -import android.app.ActivityOptions; import android.content.Intent; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -42,6 +44,8 @@ public class ThemeActivity extends BaseActivity implements int id; + private int position = -1; + @Override protected void initInject() { getActivityComponent().inject(this); @@ -67,14 +71,16 @@ protected void initEventAndData() { public void onItemClick(int position, View shareView) { mPresenter.insertReadToDB(mList.get(position).getId()); mAdapter.setReadState(position, true); - mAdapter.notifyItemChanged(position); + ThemeActivity.this.position = position; Intent intent = new Intent(); intent.setClass(mContext, ZhihuDetailActivity.class); intent.putExtra("id", mList.get(position).getId()); if (shareView != null) { - mContext.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(mContext, shareView, "shareView").toBundle()); + String transitionSharedItemName = ViewCompat.getTransitionName(shareView); + intent.putExtra("shared-item-name", transitionSharedItemName); + ActivityCompat.startActivity(ThemeActivity.this,intent, ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, shareView, transitionSharedItemName).toBundle()); } else { - startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(mContext).toBundle()); + ActivityCompat.startActivity(ThemeActivity.this, intent, ActivityOptionsCompat.makeBasic().toBundle()); } } }); @@ -97,6 +103,20 @@ public void onRefresh() { }); } + @Override + protected void onResume() { + super.onResume(); + if (mAdapter != null && position > 0) { + mAdapter.notifyItemChanged(position); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + position = -1; + } + @Override public void showError(String msg) { if(swipeRefresh.isRefreshing()) { diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ZhihuDetailActivity.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ZhihuDetailActivity.java index dfaff4b..40c2259 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ZhihuDetailActivity.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/activity/ZhihuDetailActivity.java @@ -1,7 +1,11 @@ package com.codeest.geeknews.ui.zhihu.activity; +import android.annotation.SuppressLint; import android.content.Intent; +import android.support.design.widget.AppBarLayout; import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.ActivityCompat; +import android.support.v4.view.ViewCompat; import android.support.v4.widget.NestedScrollView; import android.support.v7.widget.Toolbar; import android.transition.Transition; @@ -62,6 +66,8 @@ public class ZhihuDetailActivity extends BaseActivity impl FrameLayout llDetailBottom; @BindView(R.id.fab_like) FloatingActionButton fabLike; + @BindView(R.id.app_bar) + AppBarLayout appBar; int id = 0; int allNum = 0; @@ -83,10 +89,12 @@ protected int getLayout() { return R.layout.activity_zhihu_detail; } + @SuppressLint("SetJavaScriptEnabled") @Override protected void initEventAndData() { - setToolBar(viewToolbar,""); Intent intent = getIntent(); + setToolBar(viewToolbar,""); + ViewCompat.setTransitionName(appBar, intent.getExtras().getString("shared-item-name")); id = intent.getExtras().getInt("id"); mPresenter.queryLikeData(id); mPresenter.getDetailData(id); @@ -233,7 +241,7 @@ public void onBackPressedSupport() { if (getSupportFragmentManager().getBackStackEntryCount() > 1) { pop(); } else { - finishAfterTransition(); + ActivityCompat.finishAfterTransition(this); } } } diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/DailyAdapter.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/DailyAdapter.java index c5c32a1..56abf56 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/DailyAdapter.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/DailyAdapter.java @@ -2,6 +2,7 @@ import android.content.Context; import android.support.v4.content.ContextCompat; +import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -12,6 +13,7 @@ import android.widget.TextView; import com.codeest.geeknews.R; +import com.codeest.geeknews.app.App; import com.codeest.geeknews.component.ImageLoader; import com.codeest.geeknews.model.bean.DailyBeforeListBean; import com.codeest.geeknews.model.bean.DailyListBean; @@ -87,7 +89,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType } @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + public void onBindViewHolder( RecyclerView.ViewHolder holder, int position) { if (holder instanceof ContentViewHolder) { final int contentPosition; if(isBefore) { @@ -95,18 +97,23 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else { contentPosition = position - 2; } - ((ContentViewHolder)holder).title.setText(mList.get(contentPosition).getTitle()); - if (mList.get(contentPosition).getReadState()) { + final DailyListBean.StoriesBean listItem = mList.get(contentPosition); + ((ContentViewHolder)holder).title.setText(listItem + .getTitle()); + if (listItem + .getReadState()) { ((ContentViewHolder)holder).title.setTextColor(ContextCompat.getColor(mContext,R.color.news_read)); } else { ((ContentViewHolder)holder).title.setTextColor(ContextCompat.getColor(mContext,R.color.news_unread)); } - ImageLoader.load(mContext,mList.get(contentPosition).getImages().get(0),((ContentViewHolder)holder).image); + final String url = listItem.getImages().get(0); + ImageLoader.load(mContext,url, ((ContentViewHolder)holder).image); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(onItemClickListener != null) { ImageView iv = (ImageView) view.findViewById(R.id.iv_daily_item_image); + ViewCompat.setTransitionName(iv, App.getInstance().getString(R.string.transition_share_item_name) + "-" + url); onItemClickListener.onItemClick(contentPosition,iv); } } diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/HotAdapter.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/HotAdapter.java index 2e4688c..961e3ef 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/HotAdapter.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/HotAdapter.java @@ -2,6 +2,7 @@ import android.content.Context; import android.support.v4.content.ContextCompat; +import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -10,6 +11,7 @@ import android.widget.TextView; import com.codeest.geeknews.R; +import com.codeest.geeknews.app.App; import com.codeest.geeknews.component.ImageLoader; import com.codeest.geeknews.model.bean.HotListBean; import com.codeest.geeknews.widget.SquareImageView; @@ -48,18 +50,24 @@ public int getItemCount() { @Override public void onBindViewHolder(final ViewHolder holder, int position) { - holder.title.setText(mList.get(position).getTitle()); - if (mList.get(position).getReadState()) { + final HotListBean.RecentBean listItem = mList.get(position); + holder.title.setText(listItem + .getTitle()); + if (listItem + .getReadState()) { holder.title.setTextColor(ContextCompat.getColor(mContext,R.color.news_read)); } else { holder.title.setTextColor(ContextCompat.getColor(mContext,R.color.news_unread)); } - ImageLoader.load(mContext,mList.get(position).getThumbnail(),holder.image); + final String url = listItem + .getThumbnail(); + ImageLoader.load(mContext, url, holder.image); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(onItemClickListener != null) { ImageView iv = (ImageView) view.findViewById(R.id.iv_daily_item_image); + ViewCompat.setTransitionName(iv, App.getInstance().getString(R.string.transition_share_item_name) + "-" + url); onItemClickListener.onItemClick(holder.getAdapterPosition(),iv); } } diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/SectionChildAdapter.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/SectionChildAdapter.java index 168edb4..b087e72 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/SectionChildAdapter.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/SectionChildAdapter.java @@ -2,15 +2,15 @@ import android.content.Context; import android.support.v4.content.ContextCompat; -import android.support.v7.view.menu.ExpandedMenuView; +import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import com.codeest.geeknews.R; +import com.codeest.geeknews.app.App; import com.codeest.geeknews.component.ImageLoader; import com.codeest.geeknews.model.bean.SectionChildListBean; import com.codeest.geeknews.widget.SquareImageView; @@ -44,24 +44,32 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @Override public void onBindViewHolder(final ViewHolder holder, int position) { - if (mList.get(position).getImages() != null && mList.get(position).getImages().size() > 0) { + final SectionChildListBean.StoriesBean listItem = mList.get(position); + final StringBuilder url = new StringBuilder(""); + if (listItem.getImages() != null && listItem.getImages() + .size() > 0) { holder.ivImage.setVisibility(View.VISIBLE); - ImageLoader.load(mContext,mList.get(position).getImages().get(0),holder.ivImage); + url.append(listItem.getImages() + .get(0)); + ImageLoader.load(mContext, url.toString(), holder.ivImage); } else { holder.ivImage.setVisibility(View.GONE); } - if (mList.get(position).getReadState()) { - holder.tvTitle.setTextColor(ContextCompat.getColor(mContext,R.color.news_read)); + if (listItem.getReadState()) { + holder.tvTitle.setTextColor(ContextCompat.getColor(mContext, R.color.news_read)); } else { - holder.tvTitle.setTextColor(ContextCompat.getColor(mContext,R.color.news_unread)); + holder.tvTitle.setTextColor(ContextCompat.getColor(mContext, R.color.news_unread)); } - holder.tvTitle.setText(mList.get(position).getTitle()); + holder.tvTitle.setText(listItem.getTitle()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if(onItemClickListener != null) { + if (onItemClickListener != null) { SquareImageView iv = (SquareImageView) view.findViewById(R.id.iv_daily_item_image); - onItemClickListener.OnItemClick(holder.getAdapterPosition(),iv); + ViewCompat.setTransitionName(iv, + App.getInstance() + .getString(R.string.transition_share_item_name) + "-" + url); + onItemClickListener.OnItemClick(holder.getAdapterPosition(), iv); } } }); diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/ThemeChildAdapter.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/ThemeChildAdapter.java index 9f8bdf0..81d075f 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/ThemeChildAdapter.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/adapter/ThemeChildAdapter.java @@ -2,6 +2,7 @@ import android.content.Context; import android.graphics.Bitmap; +import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -13,6 +14,7 @@ import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.codeest.geeknews.R; +import com.codeest.geeknews.app.App; import com.codeest.geeknews.component.ImageLoader; import com.codeest.geeknews.model.bean.ThemeChildListBean; import com.codeest.geeknews.util.ImageUtil; @@ -69,33 +71,44 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { - if(holder instanceof ViewHolder) { - if (mList.get(position).getImages() != null && mList.get(position).getImages().size() > 0) { - ImageLoader.load(mContext,mList.get(position).getImages().get(0),((ViewHolder) holder).image); + if (holder instanceof ViewHolder) { + final ThemeChildListBean.StoriesBean listItem = mList.get(position); + final StringBuilder url = new StringBuilder(""); + if (listItem.getImages() != null && listItem.getImages() + .size() > 0) { + url.append(listItem.getImages() + .get(0)); + ImageLoader.load(mContext, url.toString(), ((ViewHolder) holder).image); } - ((ViewHolder) holder).title.setText(mList.get(position).getTitle()); + ((ViewHolder) holder).title.setText(listItem.getTitle()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if(onItemClickListener != null) { + if (onItemClickListener != null) { SquareImageView iv = (SquareImageView) view.findViewById(R.id.iv_daily_item_image); - onItemClickListener.onItemClick(holder.getAdapterPosition(),iv); + ViewCompat.setTransitionName(iv, + App.getInstance() + .getString(R.string.transition_share_item_name) + "-" + url); + onItemClickListener.onItemClick(holder.getAdapterPosition(), iv); } } }); - } else if(holder instanceof TopViewHolder) { + } else if (holder instanceof TopViewHolder) { if (url != null) { - ImageLoader.load(mContext, url, ((TopViewHolder)holder).ivOrigin); - ivOrigin = ((TopViewHolder)holder).ivOrigin; - Glide.with(mContext).load(url).asBitmap().into(new SimpleTarget() { - @Override - public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { - ((TopViewHolder)holder).ivBlur.setImageBitmap(ImageUtil.doBlur(resource, 50 , true)); - } - }); + ImageLoader.load(mContext, url, ((TopViewHolder) holder).ivOrigin); + ivOrigin = ((TopViewHolder) holder).ivOrigin; + Glide.with(mContext) + .load(url) + .asBitmap() + .into(new SimpleTarget() { + @Override + public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { + ((TopViewHolder) holder).ivBlur.setImageBitmap(ImageUtil.doBlur(resource, 50, true)); + } + }); } if (des != null) { - ((TopViewHolder)holder).tvDes.setText(des); + ((TopViewHolder) holder).tvDes.setText(des); } } } diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/DailyFragment.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/DailyFragment.java index 9360b6f..aea7ff8 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/DailyFragment.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/DailyFragment.java @@ -1,8 +1,10 @@ package com.codeest.geeknews.ui.zhihu.fragment; -import android.app.ActivityOptions; import android.content.Intent; import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -48,6 +50,8 @@ public class DailyFragment extends BaseFragment implements Daily DailyAdapter mAdapter; List mList = new ArrayList<>(); + private int position = -1; + @Override protected void initInject() { getFragmentComponent().inject(this); @@ -67,16 +71,14 @@ protected void initEventAndData() { public void onItemClick(int position,View shareView) { mPresenter.insertReadToDB(mList.get(position).getId()); mAdapter.setReadState(position,true); - if(mAdapter.getIsBefore()) { - mAdapter.notifyItemChanged(position + 1); - } else { - mAdapter.notifyItemChanged(position + 2); - } + DailyFragment.this.position = position; Intent intent = new Intent(); intent.setClass(mContext, ZhihuDetailActivity.class); intent.putExtra("id",mList.get(position).getId()); - ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, shareView, "shareView"); - mContext.startActivity(intent,options.toBundle()); + String transitionSharedItemName = ViewCompat.getTransitionName(shareView); + intent.putExtra("shared-item-name", transitionSharedItemName); + ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(mActivity, shareView, transitionSharedItemName); + ActivityCompat.startActivity(mActivity, intent, options.toBundle()); } }); swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @@ -99,6 +101,25 @@ public void onRefresh() { mPresenter.getDailyData(); } + @Override + public void onResume() { + super.onResume(); + if (mAdapter == null || position < 0) { + return; + } + if (mAdapter.getIsBefore()) { + mAdapter.notifyItemChanged(position + 1); + } else { + mAdapter.notifyItemChanged(position + 2); + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + position = -1; + } + /** * 当天数据 * @param info diff --git a/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/HotFragment.java b/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/HotFragment.java index f53884d..b151a19 100644 --- a/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/HotFragment.java +++ b/app/src/main/java/com/codeest/geeknews/ui/zhihu/fragment/HotFragment.java @@ -1,7 +1,9 @@ package com.codeest.geeknews.ui.zhihu.fragment; -import android.app.ActivityOptions; import android.content.Intent; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -15,7 +17,6 @@ import com.codeest.geeknews.ui.zhihu.activity.ZhihuDetailActivity; import com.codeest.geeknews.ui.zhihu.adapter.HotAdapter; import com.codeest.geeknews.util.SnackbarUtil; -import com.codeest.geeknews.util.ToastUtil; import com.victor.loading.rotate.RotateLoading; import java.util.ArrayList; @@ -38,6 +39,8 @@ public class HotFragment extends BaseFragment implements HotContra List mList; HotAdapter mAdapter; + private int position = -1; + @Override protected void initInject() { getFragmentComponent().inject(this); @@ -68,16 +71,32 @@ public void onRefresh() { public void onItemClick(int position, View shareView) { mPresenter.insertReadToDB(mList.get(position).getNews_id()); mAdapter.setReadState(position,true); - mAdapter.notifyItemChanged(position); + HotFragment.this.position = position; Intent intent = new Intent(); intent.setClass(mContext, ZhihuDetailActivity.class); intent.putExtra("id",mList.get(position).getNews_id()); - ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, shareView, "shareView"); - mContext.startActivity(intent,options.toBundle()); + String transitionSharedItemName = ViewCompat.getTransitionName(shareView); + intent.putExtra("shared-item-name", transitionSharedItemName); + ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(mActivity, shareView, transitionSharedItemName); + ActivityCompat.startActivity(mActivity, intent, options.toBundle()); } }); } + @Override + public void onResume() { + super.onResume(); + if (mAdapter != null && position > 0) { + mAdapter.notifyItemChanged(position); + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + position = -1; + } + @Override public void showError(String msg) { if(swipeRefresh.isRefreshing()) { diff --git a/app/src/main/res/layout/activity_zhihu_detail.xml b/app/src/main/res/layout/activity_zhihu_detail.xml index e4c4c48..f759149 100644 --- a/app/src/main/res/layout/activity_zhihu_detail.xml +++ b/app/src/main/res/layout/activity_zhihu_detail.xml @@ -9,7 +9,6 @@ android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:transitionName="shareView" android:fitsSystemWindows="true"> diff --git a/app/src/main/res/layout/fragment_hot.xml b/app/src/main/res/layout/fragment_hot.xml index b0f6ef8..e6d55d7 100644 --- a/app/src/main/res/layout/fragment_hot.xml +++ b/app/src/main/res/layout/fragment_hot.xml @@ -1,7 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 423df34..1792209 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,4 +39,5 @@ 项目简介:\n极客日报,一个纯粹的阅读App\n为了熟悉当前Android端主流框架的使用,也为了能有一款将新闻、技术文章、福利一网打尽的简洁的阅读应用,利用闲暇时间做了这个项目n(*≧▽≦*)n\n 本着学习的目的,该项目会持续迭代与优化,加入更丰富的阅读内容与功能,并不断尝试最新的技术,欢迎star、fork、issue、email GeekNews\t\t\tV1.0.1 + shareView diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 73017f6..cee953b 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,12 +8,22 @@ @color/colorAccent #ffffff - //沉浸状态栏 + true true - //ActionBarDrawerToggle设置颜色 + @android:color/white + + + true + + @transition/platform_transition + + @transition/platform_transition + true + @android:color/transparent +