ScrollView的简单实用并实现下拉加载

我们在一个activity中如果文本过多,一屏幕显示不下的时候,那么超出的文字就看不到了。

但是我们在浏览器浏览数据时候一屏幕容纳不下的话我们有下拉条可以下拉,那样就能看到全部内容了。


当然,在android也可以做到。

我们看看代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!--<HorizontalScrollView-->
    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/content"
            android:padding="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </ScrollView>
    <!--</HorizontalScrollView>-->
</LinearLayout>

以上的代码中我们可以发现,在TextView外面包含了一层ScrollView,就是这一层ScrollView就能实现我们开篇说的显示问题,当然,ScrollView是纵向的,横向的话就是我注释掉的HorizontalScrollView.

这里我没有添加文本内容,我实在Actitvity中动态设置文本内容的。




下面我们再来看看如何实现下拉到底进行类似于ListView滑到底部进行动态加载的呢?

package com.example.lolli.scrollview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    private ScrollView scrollView;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化控件
        textView = (TextView) findViewById(R.id.content);
        scrollView = (ScrollView) findViewById(R.id.scrollView);
        // 设置文本(获取String.xml中的资源)
        textView.setText(getResources().getString(R.string.content));
        scrollView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_MOVE:{
                        // 当Y轴滑动的像素<=0,即当前在顶部
                        if (scrollView.getScrollY()<=0){
                            Log.i("state", "滑动到了顶部");
                        }
                        /**
                         * scrollView.getScrollY()   获取Y轴滑动的距离
                         * scrollView.getHeight()   获取屏幕的高度
                         * scrollView.getChildAt(0).getMeasuredHeight()  获取scrollView的第一个子元素(即TextView)的内容高度
                         */
                        if (scrollView.getScrollY() + scrollView.getHeight() >= scrollView.getChildAt(0).getMeasuredHeight()){
                            Log.i("state", "滑动到了底部");
                            textView.append(getResources().getString(R.string.content));
                        }
                        break;
                    }
                }
                return false;
            }
        });
    }
}

这里我们监听了一个事件  onTouchLitenner,可以监控我们在屏幕上的滑动,其实当我手指滑动的距离+屏幕的高度 = 内容的高度,那么久意味着滑到底部了。

这里我们这是动态设置文本内容:

 // 设置文本(获取String.xml中的资源)
        textView.setText(getResources().getString(R.string.content));

取的是string.xml中定义好的内容

还有一句代码:

scrollView.getChildAt(0).getMeasuredHeight()
这个只的是获取scrollView第一个子元素中的文本高度,我们从最开始的布局中就可以看出来,第一个子元素就是TextView。



这样,我们就实现了利用ScrollView进行下拉到底就进行加载的功能了。/




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章