我們平時在使用APP的時候,經常可以見到一些導航欄滑到頂端就停留,而下面的控件可以接著滑動;今天,我就給大家介紹一個非常好用的滑動粘性控件StickLayout,它不僅可以讓其任意一個直接子控件滑動停留在頂端,而且還可以設置滑動到指定直接子控件,并且配有滑動改變監聽,可以輕松實現滑動時的聯動操作;我們用該控件就可以輕松實現像支付寶“所有應用”界面效果,下面我們就一起學習一下吧。
首先,我們來看一下效果演示圖:
Note:圖1為設置屬性wkp_canScrollToEndViewTop=true,圖2沒有;圖3為設置滑動改變監聽。
接下來,我們講解一下控件功能及其使用:
1.功能
滑動停留控件,可以讓其任意一個直接子控件滑動時停留在頂部,只需指定一個屬性而已,操作便捷。
2.Android Studio使用方法
dependencies{compile
'com.wkp:StickLayout:1.0.4'//Android Studio3.0+可用以下方式//implementation
'com.wkp:StickLayout:1.0.4'
}
復制代碼3.使用詳解
<!--是否粘性停留(用于直接子控件)--><attr name=
"wkp_stick" format=
"boolean"/><!--是否開啟滑動到最后一個控件的頂部,默認不開啟(用于控件本身)--><attr name=
"wkp_canScrollToEndViewTop" format=
"boolean"/>
復制代碼<?xml version=
"1.0" encoding=
"utf-8"?>
<LinearLayoutxmlns:android=
"http://schemas.android.com/apk/res/android"xmlns:app=
"http://schemas.android.com/apk/res-auto"xmlns:tools=
"http://schemas.android.com/tools"android:layout_width=
"match_parent"android:layout_height=
"match_parent"android:orientation=
"vertical"><TextViewandroid:clickable=
"true"android:onClick=
"addView"android:gravity=
"center"android:padding=
"5dp"android:text=
"添加條目"android:layout_width=
"match_parent"android:layout_height=
"wrap_content"/><!--app:wkp_canScrollToEndViewTop=
"true"--><com.wkp.sticklayout_lib.widget.StickLayoutandroid:id=
"@+id/sl"android:layout_width=
"match_parent"android:layout_height=
"wrap_content"><TextViewandroid:onClick=
"click"android:id=
"@+id/tv1"android:text=
"第1行"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/><LinearLayoutapp:wkp_stick=
"true"android:orientation=
"horizontal"android:layout_width=
"match_parent"android:layout_height=
"40dp"><TextViewandroid:onClick=
"scrollTo"android:background=
"@android:color/holo_blue_light"android:text=
"NUM2"android:gravity=
"center"android:layout_weight=
"1"android:layout_width=
"0dp"android:layout_height=
"match_parent"/><TextViewandroid:onClick=
"scrollTo3"android:background=
"@android:color/holo_green_light"android:text=
"NUM3"android:gravity=
"center"android:layout_weight=
"1"android:layout_width=
"0dp"android:layout_height=
"match_parent"/><TextViewandroid:onClick=
"scrollTo4"android:background=
"@android:color/holo_red_light"android:text=
"NUM4"android:gravity=
"center"android:layout_weight=
"1"android:layout_width=
"0dp"android:layout_height=
"match_parent"/><TextViewandroid:onClick=
"scrollTo7"android:background=
"@android:color/holo_orange_light"android:text=
"NUM7"android:gravity=
"center"android:layout_weight=
"1"android:layout_width=
"0dp"android:layout_height=
"match_parent"/></LinearLayout><TextViewandroid:id=
"@+id/tv2"android:text=
"第2行"android:background=
"@android:color/holo_blue_light"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/><TextViewandroid:id=
"@+id/tv3"app:wkp_stick=
"true"android:text=
"第3行"android:background=
"@android:color/holo_green_light"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/><TextViewandroid:background=
"@android:color/holo_red_light"android:id=
"@+id/tv4"android:text=
"第4行"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/><TextViewandroid:id=
"@+id/tv5"android:text=
"第5行"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/><TextViewandroid:id=
"@+id/tv6"android:text=
"第6行"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/><TextViewandroid:background=
"@android:color/holo_orange_light"android:id=
"@+id/tv7"android:text=
"第7行"android:gravity=
"center"android:layout_width=
"match_parent"android:layout_height=
"200dp"/></com.wkp.sticklayout_lib.widget.StickLayout></LinearLayout>
復制代碼public class MainActivity extends AppCompatActivity {private StickLayout mSl;private TextView mTv2;private View mTv3;private View mTv7;private View mTv4;private int currentPosition = -1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);mSl = findViewById(R.id.sl);mTv2 = findViewById(R.id.tv2);mTv3 = findViewById(R.id.tv3);mTv4 = findViewById(R.id.tv4);mTv7 = findViewById(R.id.tv7);
// mSl.setStickView(findViewById(R.id.tv2)); //設置粘性控件
// mSl.setStickView(findViewById(R.id.tv3));
// mSl.canScrollToEndViewTop(
true); //設置是否開啟最后控件滑動到頂部//設置滑動改變監聽(一滑動就會有回調)mSl.setOnScrollChangeListener(new StickLayout.
OnScrollChangeListener() {@Overridepublic void onScrollChange(StickLayout v, View currentView, int position, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {//直到當前控件改變在做事情
if (currentPosition != position) {Toast.makeText(v.getContext(), ((TextView) currentView).getText().toString(), Toast.LENGTH_SHORT).show();currentPosition = position;}}});}public void addView(View view) {TextView textView = new TextView(view.getContext());textView.setGravity(Gravity.CENTER);textView.setPadding(10, 10, 10, 10);textView.setText(
"新條目");mSl.addView(textView, 0);}public void scrollTo2(View view) {//滑動到指定子控件mSl.scrollToView(mTv2);}public void scrollTo3(View view) {mSl.scrollToView(mTv3);}public void scrollTo4(View view) {mSl.scrollToView(mTv4);}public void scrollTo7(View view) {mSl.scrollToView(mTv7);}
}
復制代碼結語
控件支持直接代碼創建,還有更多API請觀看StickLayout.java內的注釋說明。
歡迎大家使用Github地址,感覺好用請給個Star鼓勵一下,謝謝!
大家如果有更好的意見或建議以及好的靈感,請郵箱作者,謝謝!
QQ郵箱: 1535514884@qq.com
163郵箱: 15889686524@163.com
Gmail郵箱: wkp15889686524@gmail.com
轉載于:https://juejin.im/post/5a4ed3fa518825733d68db81
總結
以上是生活随笔為你收集整理的粘性控件,滑动停留StickLayout(导航栏滑动停留)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。