通过ScrollView实现滚动效果

此文,仅做为个人学习Android,记录成长以及方便复习!

通过ScrollView添加了滚动条,解决内容过长显示不全,通过滚动显示查看!

首先是用ScrollView把需要滚动显示的内容包裹起来

ScrollView 垂直滚动 HorizontalScrollView 水平滚动

android:scrollbars="none"去除滚动条显示


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:id="@+id/scorl"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:scrollbars="none"
        android:layout_below="@id/up">
        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv1"/>
    </ScrollView>
    <Button
        android:id="@+id/up"
        android:onClick="onclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="前进"/>

    <Button
        android:id="@+id/down"
        android:onClick="onclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/up"
        android:layout_toRightOf="@+id/up"
        android:text="后退" />
</RelativeLayout>

文本比较长,所有放在是string.xml文件夹,其实开发起来正常文本都是得放到string.xml的

<resources>
    <string name="app_name">ScrolView</string>
    <string name="tv1">第二部
在外修行两年的鸣人回来了。但此时的“晓”也开始蠢蠢欲动,已经成为砂隐村风影的我爱罗被“晓”成员迪达拉和蝎抓走。鸣人和卡卡西小组为了救出我爱罗而前往砂隐村,并找出了“晓”的根据地,但我爱罗已经被抽离尾兽而死亡。愤怒的鸣人不顾一切地追赶迪达拉,而小樱和砂忍者村的千代婆婆联手与蝎交战,最终将蝎打倒。千代婆婆牺牲自己的生命,使用转生忍术将我爱罗复活,鸣人他们回到木叶隐村。
卡卡西由于劳累过度而住院,暗部的大和代替卡卡西带领第七班,新的成员佐井也加入了队伍。他们利用从蝎那里得到的情报,前往天地桥打听有关佐助的消息。但佐井实际上却是奉上司团藏的命令执行暗杀佐助的极秘任务,本打算执行任务的他在看到鸣人与佐助的羁绊之后改变了想法。鸣人等人终于在大蛇丸的根据地与佐助重逢,但佐助仍然不打算回心转意,还是选择和大蛇丸一起离开。而佐井则因为这一任务的契机成为了鸣人他们的同伴。
鸣人为了学会比螺旋丸更强的术而展开修行,此时“晓”的成员飞段和角都为了捕获九尾而入侵木叶,与第十班的成员交战,阿斯玛在这一战中中了飞段的咒术而牺牲。为了替阿斯玛报仇,鹿丸等人结成新的小队,与卡卡西一道向飞段和角都挑战。鹿丸运用过人的智慧打败了强敌飞段,而鸣人也终于学成了新术“风遁·螺旋手里剑”,来到战场支援,一击打倒了角都,赢得胜利。
此时佐助认为自己已经获得了超越大蛇丸的力量而突然向大蛇丸攻击,破解了他的转生忍术,打倒了大蛇丸。佐助找到了大蛇丸原先的部下水月、香燐和重吾,四人组成名为“蛇”的小队,为了寻找鼬而展开行动。在此期间,佐助与“晓”的迪达拉遭遇并交战,迪达拉败于佐助手下,为了证明自己的艺术而自爆,佐助却躲在了万蛇的体内而躲过一劫。迪达拉的队友、戴着面具的“晓”的新成员“阿飞”本以为也死于爆炸之中,但“阿飞”却突然在“晓”的首领佩恩面前出现,并自称为“宇智波斑”,以幕后黑手的姿态现身。
自来也为了获取“晓”的情报而潜入雨隐村,在那里遇到佩恩和小南,并认出佩恩就是自己昔日的徒弟长门。虽然自来也启动仙人模式与佩恩六道交战,但还是不敌轮回眼的力量。自来也为了得到敌人的情报而牺牲,临终前让深作仙人将情报带回木叶。
佐助终于找到了鼬,和鼬展开激烈的战斗,两人各自施展自己的绝技发动攻击。佐助由于查克拉耗尽而导致隐藏在体内的大蛇丸重新现身,但鼬却利用须佐能乎手里的十拳剑封印了大蛇丸。不过鼬由于身患重病,在激烈的战斗过后就倒地身亡。佐助也因力量耗尽而倒下,被“阿飞”带走,“阿飞”告诉了他关于鼬的真相。佐助得知了鼬想要保护自己和村子的心意,而决定毁灭木叶隐村。佐助将“蛇”小队改名为“鹰”,为了得到“晓”的帮助而答应他们前往云隐村捕获八尾。
鸣人得知自来也牺牲的消息而大为悲痛,为了替自来也报仇而决定前去妙木山修炼仙术。此时佩恩六道突然对木叶隐村发动攻击,并几乎将村子毁灭了,连卡卡西也在和天道的交战中牺牲。学会仙术的鸣人回到村子,接连打败了六道中的五人,在与天道交战中由于目睹雏田为保护自己而重伤,导致体内的九尾暴走,此时鸣人的父亲第四代火影突然出现在鸣人的精神世界中,阻止了九尾。鸣人由于父亲的帮助而重新回到战场,打倒了佩恩天道。鸣人找到了佩恩的本体长门所在的位置,说服长门重新找回昔日的理想,长门施展轮回天生之术让包括卡卡西在内的已经牺牲的木叶村的忍者复活,自己也因此而死去。鸣人由于保护了村子而成为英雄,得到村人的认可。
    </string>
</resources>

然后就是Activiry了

其中重点的是:

scroll.getChildAt(0).getMeasuredHeight():总高度
scroll.getHeight():屏幕高度
scroll.getScrollY():滑动条滑动距离
总高度<=屏幕高度+滑动距离,则到底了
// 1.scrollTo:以滚动视图起始位置开始计算的。
// 2.scrollBy:相对前一次位置滚动相应的距离。
package com.rui.scrolview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    //声明组件
    private ScrollView scrollView;
    private TextView tv1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化ScrollView和TextView
        scrollView = (ScrollView)findViewById(R.id.scorl);
        tv1 = (TextView)findViewById(R.id.tv1);
        //ScrollView 添加监听事件
        scrollView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                //判断手势
                switch(motionEvent.getAction()){
                    //滑动
                    case MotionEvent.ACTION_MOVE :
                        //当前滑动<=0提示在顶部
                        if(scrollView.getScrollY()<=0){
                            Toast.makeText(MainActivity.this,"顶部了,别划了!",Toast.LENGTH_SHORT).show();
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                        }
                        ///scroll.getChildAt(0).getMeasuredHeight():总高度
                        //scroll.getHeight():屏幕高度
                        //scroll.getScrollY():滑动条滑动距离
                        //总高度<=屏幕高度+滑动距离,则到底了
                        if(scrollView.getChildAt(0).getMeasuredHeight()<=scrollView.getHeight()+scrollView.getScrollY()){
                            Toast.makeText(MainActivity.this,"到底了,重新加载..",Toast.LENGTH_SHORT).show();
                            //判读底部之后,重新追加文本
                            tv1.append(getResources().getString(R.string.tv1));
                        }
                        break;
                }
                return false;
            }
        });
    }
    //按钮的监听方法
    public void onclick(View view){
        switch(view.getId()){
            case R.id.up:
                // 1.scrollTo:以滚动视图起始位置开始计算的。
                // 2.scrollBy:相对前一次位置滚动相应的距离。
                scrollView.scrollBy(0,+30);
                break;
            case R.id.down:
                scrollView.scrollBy(0,-30);
                break;
        }
    }
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值