22
33import android .content .Context ;
44import android .text .TextUtils ;
5- import android .view . Gravity ;
5+ import android .util . Log ;
66import android .view .MotionEvent ;
77import android .view .View ;
88import android .view .WindowManager ;
2222 * Created by rome753 on 2017/3/31.
2323 */
2424
25- public class ActivityTaskView extends FrameLayout {
25+ public class ActivityTaskView extends LinearLayout {
2626
2727 public static final String TAG = ActivityTaskView .class .getSimpleName ();
2828 private LinearLayout mLinearLayout ;
2929 private FrameLayout mContainer ;
3030 private View mTinyView ;
3131 private View mTaskView ;
32+ private View mEmptyView ;
3233
3334 private LifecycleObservable mObservable ;
3435
3536 private int mStatusHeight ;
37+ private int mScreenWidth ;
3638
3739 public ActivityTaskView (Context context ) {
3840 super (context );
3941 inflate (context , R .layout .view_activity_task , this );
4042 mStatusHeight = AUtils .getStatusBarHeight (context );
43+ mScreenWidth = AUtils .getScreenWidth (context );
4144 mLinearLayout = findViewById (R .id .ll );
4245 mContainer = findViewById (R .id .fl );
4346 mTinyView = findViewById (R .id .tiny_view );
4447 mTaskView = findViewById (R .id .task_view );
48+ mEmptyView = findViewById (R .id .view_empty );
4549 mObservable = new LifecycleObservable ();
4650 }
4751
@@ -57,11 +61,13 @@ public FragmentTaskView findFragmentTaskView(String activity) {
5761
5862 float mInnerX ;
5963 float mInnerY ;
64+ long downTime ;
6065
6166 @ Override
6267 public boolean onTouchEvent (MotionEvent event ) {
6368 switch (event .getAction ()) {
6469 case MotionEvent .ACTION_DOWN :
70+ downTime = System .currentTimeMillis ();
6571 mInnerX = event .getX ();
6672 mInnerY = event .getY ();
6773 break ;
@@ -74,16 +80,22 @@ public boolean onTouchEvent(MotionEvent event) {
7480 updateLayout (params );
7581 break ;
7682 case MotionEvent .ACTION_UP :
77- showTinyOrNot ();
83+ if (System .currentTimeMillis () - downTime < 100
84+ && Math .abs (event .getX () - mInnerX ) < 10
85+ && Math .abs (event .getY () - mInnerY ) < 10 ) {
86+ doClick ();
87+ }
88+ moveToBorder ();
7889 break ;
7990
8091 }
8192 return true ;
8293 }
8394
84- @ Override
85- public boolean onInterceptTouchEvent (MotionEvent ev ) {
86- return true ;
95+ private void doClick () {
96+ boolean visible = mTaskView .getVisibility () == VISIBLE ;
97+ mTaskView .setVisibility (visible ? GONE : VISIBLE );
98+ mTinyView .setVisibility (!visible ? GONE : VISIBLE );
8799 }
88100
89101 private void updateLayout (WindowManager .LayoutParams params ){
@@ -93,17 +105,21 @@ private void updateLayout(WindowManager.LayoutParams params){
93105 }
94106 }
95107
96- private void showTinyOrNot () {
108+ private void moveToBorder () {
97109 WindowManager .LayoutParams p = (WindowManager .LayoutParams ) getLayoutParams ();
98- if ( p .x < 5 || mLinearLayout . getChildCount () == 0 ){
99- mTinyView . setVisibility ( VISIBLE );
100- mTaskView . setVisibility ( GONE );
110+ Log . d ( "chao" , "x " + p .x + " " + (( mScreenWidth - getWidth ()) / 2 ));
111+
112+ if ( p . x <= ( mScreenWidth - getWidth ()) / 2 ) { // move left
101113 p .x = 0 ;
102- updateLayout (p );
103- }else {
104- mTinyView .setVisibility (GONE );
105- mTaskView .setVisibility (VISIBLE );
114+ removeView (mTinyView );
115+ addView (mTinyView , 0 );
116+
117+ } else { // move right
118+ p .x = mScreenWidth ;
119+ removeView (mTinyView );
120+ addView (mTinyView );
106121 }
122+ updateLayout (p );
107123 }
108124
109125 private ATree aTree = new ATree ();
@@ -156,6 +172,14 @@ private void notifyData() {
156172 }
157173 mLinearLayout .addView (layout , 0 );
158174 }
175+ mEmptyView .setVisibility (mLinearLayout .getChildCount () == 0 ? VISIBLE : GONE );
176+
177+ }
178+
179+ public void clear () {
180+ aTree = new ATree ();
181+ mContainer .removeAllViews ();
182+ notifyData ();
159183 }
160184
161185}
0 commit comments