Skip to content

Commit 870d800

Browse files
committed
快速返回顶部
1 parent 9a2353f commit 870d800

4 files changed

Lines changed: 53 additions & 27 deletions

File tree

diycode-app/src/main/java/com/gcssloop/diycode/activity/MainActivity.java

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
package com.gcssloop.diycode.activity;
2424

2525
import android.support.design.widget.NavigationView;
26-
import android.support.design.widget.Snackbar;
2726
import android.support.design.widget.TabLayout;
2827
import android.support.v4.app.Fragment;
2928
import android.support.v4.app.FragmentPagerAdapter;
@@ -32,8 +31,10 @@
3231
import android.support.v4.widget.DrawerLayout;
3332
import android.support.v7.app.ActionBarDrawerToggle;
3433
import android.support.v7.widget.Toolbar;
34+
import android.view.GestureDetector;
3535
import android.view.Menu;
3636
import android.view.MenuItem;
37+
import android.view.MotionEvent;
3738
import android.view.View;
3839
import android.widget.ImageView;
3940
import android.widget.TextView;
@@ -59,7 +60,7 @@
5960
import org.greenrobot.eventbus.ThreadMode;
6061

6162
public class MainActivity extends BaseActivity
62-
implements NavigationView.OnNavigationItemSelectedListener {
63+
implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener {
6364
private DataCache mCache;
6465
private Config mConfig;
6566
private int mCurrentPosition = 0;
@@ -86,7 +87,7 @@ public void initViews(ViewHolder holder, View root) {
8687
private void initViewPager(ViewHolder holder) {
8788
ViewPager mViewPager = holder.get(R.id.view_pager);
8889
TabLayout mTabLayout = holder.get(R.id.tab_layout);
89-
mViewPager.setOffscreenPageLimit(1); // 防止滑动到第三个页面时,第一个页面被销毁
90+
mViewPager.setOffscreenPageLimit(3); // 防止滑动到第三个页面时,第一个页面被销毁
9091

9192
mFragment1 = TopicListFragment.newInstance();
9293
mFragment2 = NewsListFragment.newInstance();
@@ -170,13 +171,26 @@ private void initMenu(ViewHolder holder) {
170171
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
171172
navigationView.setNavigationItemSelectedListener(this);
172173

173-
holder.setOnClickListener(new View.OnClickListener() {
174+
// 双击 666
175+
final GestureDetector detector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
174176
@Override
175-
public void onClick(View v) {
176-
Snackbar.make(v, "Diycode", Snackbar.LENGTH_LONG)
177-
.setAction("Action", null).show();
177+
public boolean onDoubleTap(MotionEvent e) {
178+
quickToTop(); // 快速返回头部
179+
return super.onDoubleTap(e);
178180
}
179-
}, R.id.fab);
181+
});
182+
183+
toolbar.setOnTouchListener(new View.OnTouchListener() {
184+
@Override
185+
public boolean onTouch(View v, MotionEvent event) {
186+
detector.onTouchEvent(event);
187+
return false;
188+
}
189+
});
190+
191+
toolbar.setOnClickListener(this);
192+
193+
holder.setOnClickListener(this, R.id.fab);
180194

181195
loadMenuData();
182196
}
@@ -265,22 +279,25 @@ public boolean onOptionsItemSelected(MenuItem item) {
265279
openActivity(NotificationActivity.class);
266280
}
267281
return true;
268-
} else if (id == R.id.action_quick_to_top) {
269-
switch (mCurrentPosition) {
270-
case 0:
271-
mFragment1.quickToTop();
272-
break;
273-
case 1:
274-
mFragment2.quickToTop();
275-
case 2:
276-
mFragment3.quickToTop();
277-
278-
}
279282
}
280-
281283
return super.onOptionsItemSelected(item);
282284
}
283285

286+
// 快速返回顶部
287+
private void quickToTop() {
288+
switch (mCurrentPosition) {
289+
case 0:
290+
mFragment1.quickToTop();
291+
break;
292+
case 1:
293+
mFragment2.quickToTop();
294+
break;
295+
case 2:
296+
mFragment3.quickToTop();
297+
break;
298+
}
299+
}
300+
284301
@Override
285302
public boolean onNavigationItemSelected(MenuItem item) {
286303
int id = item.getItemId();
@@ -314,4 +331,17 @@ protected void onDestroy() {
314331
EventBus.getDefault().unregister(this);
315332
mConfig.saveMainViewPagerPosition(mCurrentPosition);
316333
}
334+
335+
336+
@Override
337+
public void onClick(View v) {
338+
switch (v.getId()){
339+
case R.id.toolbar:
340+
toastShort("双击标题栏快速返回顶部");
341+
break;
342+
case R.id.fab:
343+
quickToTop();
344+
break;
345+
}
346+
}
317347
}

diycode-app/src/main/res/layout/app_bar_main.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@
5555
<include layout="@layout/content_main"/>
5656

5757
<android.support.design.widget.FloatingActionButton
58-
android:visibility="gone"
58+
app:layout_scrollFlags="scroll|enterAlways"
59+
android:visibility="visible"
5960
android:id="@+id/fab"
6061
android:layout_width="wrap_content"
6162
android:layout_height="wrap_content"
6263
android:layout_gravity="bottom|end"
6364
android:layout_margin="@dimen/fab_margin"
64-
app:srcCompat="@android:drawable/ic_dialog_email"/>
65+
app:srcCompat="@mipmap/fab_up"/>
6566

6667
</android.support.design.widget.CoordinatorLayout>

diycode-app/src/main/res/menu/main.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@
2323

2424
<menu xmlns:android="http://schemas.android.com/apk/res/android"
2525
xmlns:app="http://schemas.android.com/apk/res-auto">
26-
<item
27-
android:id="@+id/action_quick_to_top"
28-
android:icon="@mipmap/up"
29-
android:title="快速返回"
30-
app:showAsAction="always"/>
3126
<item
3227
android:id="@+id/action_notification"
3328
android:icon="@mipmap/notification"
1.05 KB
Loading

0 commit comments

Comments
 (0)