Skip to content

Commit 7015b8c

Browse files
committed
see 02/22 log
1 parent ee1db21 commit 7015b8c

File tree

11 files changed

+416
-64
lines changed

11 files changed

+416
-64
lines changed

app/src/main/java/com/blankj/androidutilcode/activity/FragmentActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ protected void onCreate(Bundle savedInstanceState) {
3131
setContentView(R.layout.activity_fragment);
3232
ArrayList<Fragment> fragments = new ArrayList<>();
3333
fragments.add(Demo0Fragment.newInstance());
34-
fragments.add(Demo1Fragment.newInstance());
35-
fragments.add(Demo2Fragment.newInstance());
36-
rootFragment = FragmentUtils.addFragments(getSupportFragmentManager(), fragments, 0, R.id.fragment_container);
34+
// fragments.add(Demo1Fragment.newInstance());
35+
// fragments.add(Demo2Fragment.newInstance());
36+
rootFragment = FragmentUtils.addFragments(getSupportFragmentManager(), fragments, R.id.fragment_container, 0);
3737
}
3838

3939

app/src/main/java/com/blankj/androidutilcode/fragment/Demo0Fragment.java

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package com.blankj.androidutilcode.fragment;
22

33
import android.graphics.Color;
4+
import android.os.Build;
45
import android.os.Bundle;
56
import android.support.annotation.Nullable;
67
import android.support.v4.app.Fragment;
7-
import android.support.v4.view.ViewCompat;
8+
import android.transition.Fade;
89
import android.view.LayoutInflater;
910
import android.view.View;
1011
import android.view.ViewGroup;
1112
import android.widget.Button;
13+
import android.widget.ImageView;
1214
import android.widget.TextView;
1315

1416
import com.blankj.androidutilcode.R;
1517
import com.blankj.androidutilcode.activity.FragmentActivity;
18+
import com.blankj.androidutilcode.transition.DetailTransition;
1619
import com.blankj.utilcode.utils.FragmentUtils;
1720
import com.blankj.utilcode.utils.ToastUtils;
1821

@@ -29,7 +32,8 @@
2932
public class Demo0Fragment extends Fragment
3033
implements View.OnClickListener, FragmentUtils.OnBackClickListener {
3134

32-
private Fragment fragment1;
35+
private Demo0Fragment demo0Fragment;
36+
private FragmentUtils.SharedElement sharedElement;
3337

3438
public static Demo0Fragment newInstance() {
3539

@@ -40,8 +44,9 @@ public static Demo0Fragment newInstance() {
4044
return fragment;
4145
}
4246

43-
private Button btnShowAboutFragment;
44-
private TextView tvAboutFragment;
47+
private Button btnShowAboutFragment;
48+
private ImageView ivSharedElement;
49+
private TextView tvAboutFragment;
4550

4651
@Override
4752
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -60,7 +65,11 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
6065
view.findViewById(R.id.btn_pop_add).setOnClickListener(this);
6166
view.findViewById(R.id.btn_hide_show).setOnClickListener(this);
6267
view.findViewById(R.id.btn_replace).setOnClickListener(this);
68+
ivSharedElement = (ImageView) view.findViewById(R.id.iv_shared_element);
6369
tvAboutFragment = (TextView) view.findViewById(R.id.tv_about_fragment);
70+
demo0Fragment = this;
71+
sharedElement = new FragmentUtils.SharedElement(ivSharedElement, getString(R.string.fragment_transition));
72+
setExitTransition(new Fade());
6473
}
6574

6675
@Override
@@ -77,7 +86,7 @@ public void onClick(View view) {
7786
case R.id.btn_show_about_fragment:
7887
tvAboutFragment.setText("lastAdd: " + FragmentUtils.getLastAddFragment(getFragmentManager()).getClass().getSimpleName()
7988
+ "\nlastAddInStack: " + (FragmentUtils.getLastAddFragmentInStack(getFragmentManager()) != null ? FragmentUtils.getLastAddFragmentInStack(getFragmentManager()).getClass().getSimpleName() : "null")
80-
+ "\ntopShow: " + FragmentUtils.getTopShowFragment(getFragmentManager()).getClass().getSimpleName()
89+
+ "\ntopShow: " + (FragmentUtils.getTopShowFragment(getFragmentManager()) != null ? FragmentUtils.getTopShowFragment(getFragmentManager()).getClass().getSimpleName() : "null")
8190
+ "\ntopShowInStack: " + (FragmentUtils.getTopShowFragmentInStack(getFragmentManager()) != null ? FragmentUtils.getTopShowFragmentInStack(getFragmentManager()).getClass().getSimpleName() : "null")
8291
+ "\n---all of fragments---\n"
8392
+ FragmentUtils.getAllFragments(getFragmentManager()).toString()
@@ -88,20 +97,40 @@ public void onClick(View view) {
8897
);
8998
break;
9099
case R.id.btn_add_hide:
91-
FragmentUtils.addFragment(getFragmentManager(), Demo1Fragment.newInstance(), R.id.fragment_container, true, true);
100+
FragmentUtils.hideAddFragment(getFragmentManager(),
101+
demo0Fragment,
102+
addSharedElement(Demo1Fragment.newInstance()),
103+
R.id.fragment_container,
104+
false,
105+
true,
106+
sharedElement);
92107
break;
93108
case R.id.btn_add_show:
94-
FragmentUtils.addFragment(getFragmentManager(), Demo1Fragment.newInstance(), R.id.fragment_container, false, true);
109+
FragmentUtils.addFragment(getFragmentManager(),
110+
addSharedElement(Demo1Fragment.newInstance()),
111+
R.id.fragment_container,
112+
false,
113+
false,
114+
sharedElement);
95115
break;
96116
case R.id.btn_add_child:
97-
FragmentUtils.addFragment(getChildFragmentManager(), Demo2Fragment.newInstance(), R.id.child_fragment_container, false, true);
117+
FragmentUtils.addFragment(getChildFragmentManager(),
118+
Demo2Fragment.newInstance(),
119+
R.id.child_fragment_container,
120+
false,
121+
true);
98122
break;
99123
case R.id.btn_pop_to_root:
100-
FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true);
124+
FragmentUtils.popToFragment(getFragmentManager(),
125+
Demo1Fragment.class,
126+
true);
101127
break;
102128
case R.id.btn_pop_add:
103-
ViewCompat.setTransitionName(btnShowAboutFragment, "addSharedElement");
104-
FragmentUtils.popAddFragment(getFragmentManager(), R.id.fragment_container, Demo2Fragment.newInstance(), true, new FragmentUtils.SharedElement(this.btnShowAboutFragment, "btnShowAboutFragment"));
129+
FragmentUtils.popAddFragment(getFragmentManager(),
130+
addSharedElement(Demo2Fragment.newInstance()),
131+
R.id.fragment_container,
132+
true,
133+
sharedElement);
105134
break;
106135
case R.id.btn_hide_show:
107136
Fragment fragment1 = FragmentUtils.findFragment(getFragmentManager(), Demo1Fragment.class);
@@ -112,11 +141,20 @@ public void onClick(View view) {
112141
}
113142
break;
114143
case R.id.btn_replace:
115-
((FragmentActivity) getActivity()).rootFragment = FragmentUtils.replaceFragment(this, Demo3Fragment.newInstance(), false);
144+
((FragmentActivity) getActivity()).rootFragment = FragmentUtils.replaceFragment(this, addSharedElement(Demo3Fragment.newInstance()), false, sharedElement);
116145
break;
117146
}
118147
}
119148

149+
private Fragment addSharedElement(Fragment fragment) {
150+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
151+
fragment.setSharedElementEnterTransition(new DetailTransition());
152+
fragment.setEnterTransition(new Fade());
153+
fragment.setSharedElementReturnTransition(new DetailTransition());
154+
}
155+
return fragment;
156+
}
157+
120158
@Override
121159
public boolean onBackClick() {
122160
// FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true);

app/src/main/java/com/blankj/androidutilcode/fragment/Demo1Fragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void onClick(View view) {
7575
);
7676
break;
7777
case R.id.btn_hide_show:
78-
FragmentUtils.hideShowFragment(this, ((FragmentActivity) getActivity()).rootFragment);
78+
FragmentUtils.hideAllShowFragment(((FragmentActivity) getActivity()).rootFragment);
7979
break;
8080
}
8181
}

app/src/main/java/com/blankj/androidutilcode/fragment/Demo3Fragment.java

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package com.blankj.androidutilcode.fragment;
22

33
import android.graphics.Color;
4+
import android.os.Build;
45
import android.os.Bundle;
56
import android.support.annotation.Nullable;
67
import android.support.v4.app.Fragment;
7-
import android.support.v4.view.ViewCompat;
8+
import android.transition.Fade;
89
import android.view.LayoutInflater;
910
import android.view.View;
1011
import android.view.ViewGroup;
1112
import android.widget.Button;
13+
import android.widget.ImageView;
1214
import android.widget.TextView;
1315

1416
import com.blankj.androidutilcode.R;
1517
import com.blankj.androidutilcode.activity.FragmentActivity;
18+
import com.blankj.androidutilcode.transition.DetailTransition;
1619
import com.blankj.utilcode.utils.FragmentUtils;
1720
import com.blankj.utilcode.utils.ToastUtils;
1821

@@ -27,7 +30,7 @@
2730
* </pre>
2831
*/
2932
public class Demo3Fragment extends Fragment
30-
implements View.OnClickListener {
33+
implements View.OnClickListener, FragmentUtils.OnBackClickListener {
3134

3235
private Fragment fragment1;
3336

@@ -40,25 +43,28 @@ public static Demo3Fragment newInstance() {
4043
return fragment;
4144
}
4245

43-
private Button btnShowAboutFragment;
44-
private TextView tvAboutFragment;
46+
private Button btnShowAboutFragment;
47+
private ImageView ivSharedElement;
48+
private TextView tvAboutFragment;
4549

4650
@Override
4751
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
48-
return inflater.inflate(R.layout.fragment_demo0, container, false);
52+
return inflater.inflate(R.layout.fragment_demo3, container, false);
4953
}
5054

5155
@Override
5256
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
5357
super.onViewCreated(view, savedInstanceState);
5458
btnShowAboutFragment = (Button) view.findViewById(R.id.btn_show_about_fragment);
5559
btnShowAboutFragment.setOnClickListener(this);
60+
view.findViewById(R.id.btn_add_hide).setOnClickListener(this);
5661
view.findViewById(R.id.btn_add_show).setOnClickListener(this);
5762
view.findViewById(R.id.btn_add_child).setOnClickListener(this);
5863
view.findViewById(R.id.btn_pop_to_root).setOnClickListener(this);
5964
view.findViewById(R.id.btn_pop_add).setOnClickListener(this);
6065
view.findViewById(R.id.btn_hide_show).setOnClickListener(this);
6166
view.findViewById(R.id.btn_replace).setOnClickListener(this);
67+
ivSharedElement = (ImageView) view.findViewById(R.id.iv_shared_element);
6268
tvAboutFragment = (TextView) view.findViewById(R.id.tv_about_fragment);
6369
}
6470

@@ -86,18 +92,20 @@ public void onClick(View view) {
8692
+ "\n---stack bottom---\n\n"
8793
);
8894
break;
89-
case R.id.btn_add_show:
95+
case R.id.btn_add_hide:
9096
FragmentUtils.addFragment(getFragmentManager(), Demo1Fragment.newInstance(), R.id.fragment_container, true, true);
9197
break;
98+
case R.id.btn_add_show:
99+
FragmentUtils.addFragment(getFragmentManager(), Demo1Fragment.newInstance(), R.id.fragment_container, false, true);
100+
break;
92101
case R.id.btn_add_child:
93102
FragmentUtils.addFragment(getChildFragmentManager(), Demo2Fragment.newInstance(), R.id.child_fragment_container, false, true);
94103
break;
95104
case R.id.btn_pop_to_root:
96105
FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true);
97106
break;
98107
case R.id.btn_pop_add:
99-
ViewCompat.setTransitionName(btnShowAboutFragment, "addSharedElement");
100-
FragmentUtils.popAddFragment(getFragmentManager(), R.id.fragment_container, Demo2Fragment.newInstance(), true, new FragmentUtils.SharedElement(this.btnShowAboutFragment, "btnShowAboutFragment"));
108+
FragmentUtils.popAddFragment(getFragmentManager(), Demo2Fragment.newInstance(), R.id.fragment_container, true, new FragmentUtils.SharedElement(this.btnShowAboutFragment, "btnShowAboutFragment"));
101109
break;
102110
case R.id.btn_hide_show:
103111
Fragment fragment1 = FragmentUtils.findFragment(getFragmentManager(), Demo1Fragment.class);
@@ -108,8 +116,21 @@ public void onClick(View view) {
108116
}
109117
break;
110118
case R.id.btn_replace:
111-
((FragmentActivity) getActivity()).rootFragment = FragmentUtils.replaceFragment(this, Demo0Fragment.newInstance(), false);
119+
Demo0Fragment demo0Fragment = Demo0Fragment.newInstance();
120+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
121+
demo0Fragment.setSharedElementEnterTransition(new DetailTransition());
122+
setExitTransition(new Fade());
123+
demo0Fragment.setEnterTransition(new Fade());
124+
demo0Fragment.setSharedElementReturnTransition(new DetailTransition());
125+
}
126+
((FragmentActivity)getActivity()).rootFragment = FragmentUtils.replaceFragment(this, demo0Fragment, false, new FragmentUtils.SharedElement(ivSharedElement, getString(R.string.fragment_transition)));
112127
break;
113128
}
114129
}
130+
131+
@Override
132+
public boolean onBackClick() {
133+
// FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true);
134+
return false;
135+
}
115136
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.blankj.androidutilcode.transition;
2+
3+
import android.annotation.TargetApi;
4+
import android.content.Context;
5+
import android.os.Build;
6+
import android.transition.ChangeBounds;
7+
import android.transition.ChangeImageTransform;
8+
import android.transition.ChangeTransform;
9+
import android.transition.TransitionSet;
10+
import android.util.AttributeSet;
11+
12+
/**
13+
* <pre>
14+
* author: Blankj
15+
* blog : http://blankj.com
16+
* time : 17/02/21
17+
* desc :
18+
* </pre>
19+
*/
20+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
21+
public class DetailTransition extends TransitionSet {
22+
public DetailTransition() {
23+
init();
24+
}
25+
26+
// 允许资源文件使用
27+
public DetailTransition(Context context, AttributeSet attrs) {
28+
super(context, attrs);
29+
init();
30+
}
31+
32+
private void init() {
33+
setOrdering(ORDERING_TOGETHER);
34+
addTransition(new ChangeBounds()).
35+
addTransition(new ChangeTransform()).
36+
addTransition(new ChangeImageTransform());
37+
}
38+
}

app/src/main/res/layout/fragment_demo0.xml

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@
1111
android:orientation="vertical"
1212
android:padding="@dimen/spacing_small">
1313

14+
<TextView
15+
android:id="@+id/tv_about_fragment"
16+
style="@style/Font"
17+
android:layout_width="match_parent"
18+
android:layout_height="wrap_content"
19+
android:gravity="center"
20+
/>
21+
22+
<FrameLayout
23+
android:id="@+id/child_fragment_container"
24+
android:layout_width="match_parent"
25+
android:layout_height="wrap_content"/>
26+
1427
<Button
1528
android:id="@+id/btn_show_about_fragment"
1629
style="@style/BtnFont"
@@ -75,18 +88,12 @@
7588
android:text="@string/fragment.replace"
7689
/>
7790

78-
<TextView
79-
android:id="@+id/tv_about_fragment"
80-
style="@style/Font"
81-
android:layout_width="match_parent"
91+
<ImageView
92+
android:id="@+id/iv_shared_element"
93+
android:layout_width="wrap_content"
8294
android:layout_height="wrap_content"
83-
android:gravity="center"
84-
/>
85-
86-
<FrameLayout
87-
android:id="@+id/child_fragment_container"
88-
android:layout_width="match_parent"
89-
android:layout_height="wrap_content"/>
95+
android:src="@drawable/lena"
96+
android:transitionName="@string/fragment.transition"/>
9097

9198
</LinearLayout>
9299

app/src/main/res/layout/fragment_demo1.xml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,35 @@
1111
android:orientation="vertical"
1212
android:padding="@dimen/spacing_small">
1313

14+
<TextView
15+
android:id="@+id/tv_about_fragment"
16+
style="@style/Font"
17+
android:layout_width="match_parent"
18+
android:layout_height="wrap_content"
19+
android:gravity="center"
20+
/>
21+
1422
<Button
15-
style="@style/BtnFont"
1623
android:id="@+id/btn_show_about_fragment"
24+
style="@style/BtnFont"
1725
android:layout_width="match_parent"
1826
android:layout_height="wrap_content"
1927
android:text="@string/fragment.show_stack"
2028
/>
2129

2230
<Button
23-
style="@style/BtnFont"
2431
android:id="@+id/btn_hide_show"
32+
style="@style/BtnFont"
2533
android:layout_width="match_parent"
2634
android:layout_height="wrap_content"
2735
android:text="@string/fragment.hide_demo1_show_demo0"
2836
/>
2937

30-
<TextView
31-
android:id="@+id/tv_about_fragment"
32-
style="@style/Font"
33-
android:layout_width="match_parent"
38+
<ImageView
39+
android:layout_width="wrap_content"
3440
android:layout_height="wrap_content"
35-
android:gravity="center"
36-
/>
41+
android:src="@drawable/lena"
42+
android:transitionName="@string/fragment.transition"/>
3743

3844
</LinearLayout>
3945

0 commit comments

Comments
 (0)