ScrollView的使用

scrollTo()相对于左上角进行滚动,scrollBy()相对于上次滑动的位置进行滑动。

ScrollView滑动到指定的位置,让焦点显示。

——————————————————————>

getMeasuredHeight() 获取高度

getMeasuredHeight()是实际View的大小,与屏幕无关,而getHeight的大小此时则是屏幕的大小。

当超出屏幕后, getMeasuredHeight() 等于 getHeight()加上屏幕之外没有显示的大小。

——————————————————————>

<HorizontalScrollView>, <ScrollView>只能有一个子控件

获取资源文件对象,通过传递id,获取对应的资源;
隐藏ScrollView的滚动条,xml中配置,代码中设置;
判断ScrollView什么时候滑动到底部?
TextView中的append方法,追加刷新

控制滚动条滚动的位置: ScrollTo与ScrollBy的区别  参考的坐标系不一样


package com.lantu.tuhuadmin.testapplication;

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.Button;
import android.widget.ScrollView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "MainActivity";
    private ScrollView scroll_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn_down = (Button) findViewById(R.id.btn_down);
        Button btn_up = (Button) findViewById(R.id.btn_up);
        btn_down.setOnClickListener(MainActivity.this);
        btn_up.setOnClickListener(MainActivity.this);

        //不滚动显示不完整,通过Resources对象,获取资源
        final TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText(getResources().getText(R.string.tv_content));

        //在布局文件中,通过让tv成为ScrollView的子控件实现滚动

        //通过代码实现隐藏滚动条
        scroll_view = (ScrollView) findViewById(R.id.scroll_view);
        scroll_view.setVerticalScrollBarEnabled(false);
        //scroll_view.setHorizontalScrollBarEnabled(false);

        //如何控制ScrollView视图的位置?

        //监听ScrollView什么时候能够滑动到底部?  通过设置触摸监听实现
        scroll_view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE: {
                        /**
                         * getScrollBy()  滚动条滑动的距离
                         * getHeight()  获取控件显示的高度
                         * getMeasuredHeight()  获取控件总的高度,包括隐藏起来的。
                         */
                        if (scroll_view.getScaleY() < 0 || scroll_view.getScaleY() == 0) {
                            //说明ScrollView没有滑动
                            Log.i(TAG, "顶部");
                        }

                        //滑动条滑动到最底部的位置时   TextView的总高度=getScaleY()+getHeight()
                        //获取TextView的总高度:scroll_view.getChildAt(0).getMeasuredHeight()
                        //一屏幕的高度:scroll_view.getHeight()
                        if (scroll_view.getChildAt(0).getMeasuredHeight() < scroll_view.getScaleY() + scroll_view.getHeight() || scroll_view.getChildAt(0).getMeasuredHeight() == scroll_view.getScaleY() + scroll_view.getHeight()) {
                            Log.i(TAG, "滑动到底部");

                            //实现刷新效果   追加要显示的内容
                            tv.append(getResources().getText(R.string.tv_content));
                        }
                    }
                    break;
                    case MotionEvent.ACTION_DOWN: {
                    }
                    break;
                    case MotionEvent.ACTION_UP: {
                    }
                    break;
                }
                return false;
            }
        });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_down: {
                //向下滑动
                // scroll_view.scrollTo(0, 30);
                scroll_view.scrollBy(0, 30);
            }
            break;
            case R.id.btn_up: {
                //向上滑动
                // scroll_view.scrollTo(0, -30);
                scroll_view.scrollBy(0, -30);
            }
            break;
        }
    }
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值