百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

通过ScrollView实现滚动效果

xsobi 2024-11-26 10:13 1 浏览

此文,仅做为个人学习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;
        }
    }
}

效果图

相关推荐

好用的云函数!后端低代码接口开发,零基础编写API接口

前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...

快速上手:Windows 平台上 cURL 命令的使用方法

在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...

使用 Golang net/http 包:基础入门与实战

简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...

#小白接口# 使用云函数,人人都能编写和发布自己的API接口

你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...

window使用curl命令的注意事项 curl命令用法

cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...

Linux 系统curl命令使用详解 linuxctrl

curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...

Tornado 入门:初学者指南 tornados

Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...

PHP Curl的简单使用 php curl formdata

本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...

Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介

本章涵盖使用Actix提供静态网页...

我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些

这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...

linux文件下载、服务器交互(curl)

基础环境curl命令描述...

curl简单使用 curl sh

1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...

常用linux命令:curl 常用linux命令大全

//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...

三十七,Web渗透提高班之hack the box在线靶场注册及入门知识

一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...