第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 粘性控件 滑动停留StickLayout(导航栏滑动停留)

粘性控件 滑动停留StickLayout(导航栏滑动停留)

时间:2020-12-25 12:00:50

相关推荐

粘性控件 滑动停留StickLayout(导航栏滑动停留)

我们平时在使用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="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/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@

163邮箱: 15889686524@

Gmail邮箱: wkp15889686524@

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。