ScrollTo,ScrollBy,offsetLeftAndRight,offsetTopAndBottom以及侧滑的简单实现

转载 2016年08月31日 15:18:48

ScrollTo,ScrollBy


一、滚动的是什么

[java] view plain copy
  1. scrollgoback.setOnClickListener(new OnClickListener() {  
  2.               
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         text.scrollBy(2, -10);  
  6. //      text.scrollTo(20, -50);  
  7.         textInfo.setText("ScrollX = "+text.getScrollX()+"\n"+"ScrollY = "+text.getScrollY());  
  8.     }  
  9.    });  
  10.           
  11. scroll.setOnClickListener(new OnClickListener() {  
  12.               
  13.     @Override  
  14.     public void onClick(View v) {  
  15.     text.scrollBy(-210);  
  16. //  text.scrollTo(-20, 50);  
  17.     textInfo.setText("ScrollX = "+text.getScrollX()+"\n"+"ScrollY = "+text.getScrollY());  
  18.     }  
  19.    });  



首先明白一点调用View的scrollTo()和scrollBy()是用于滑动View中的内容,而不是把某个View的位置进行改变。如果想改变莫个View在屏幕中的位置,可以先getparent,得到父view,再对父view调用scrollto或scrollby


scrollto是移动绝对位置,scrollby是相对现在的位置移动多少


二、移动的方向


调用这两个方法会导致视图重绘.
即调用public void invalidate(int l, int t, int r, int b)方法.
此处的l,t,r,b四个参数就表示View原来的坐标.
在该方法中最终会调用:
tmpr.set(l - scrollX, t - scrollY, r - scrollX, b - scrollY);
p.invalidateChild(this, tmpr);
其中tmpr是ViewParent,tmpr是Rect,this是原来的View.
通过这两行代码就把View在一个Rect中重绘.
请注意第一行代码:
原来的l和r均减去了scrollX
原来的t和b均减去了scrollY
就是说scrollX如果是正值,那么重绘后的View的宽度反而减少了;反之同理
就是说scrollY如果是正值,那么重绘后的View的高度反而减少了;反之同理
所以,TextView调用scrollTo(0,25)和我们的理解相反


二、简单的侧滑:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rlall"
    tools:context="com.qf.zhouyi.test.MainActivity">

    <RelativeLayout
        android:id="@+id/rlcenter"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorAccent">
        <Button
            android:onClick="onShowLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左侧"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="右侧"/>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary"
        android:layout_toLeftOf="@id/rlcenter"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000"
        android:layout_toRightOf="@id/rlcenter"/>



</RelativeLayout>
package com.qf.zhouyi.test;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

    RelativeLayout mview;
    boolean bShowLeft;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mview = (RelativeLayout) findViewById(R.id.rlall);
        bShowLeft = false;
    }


    public void onShowLeft(View view) {

        if (!bShowLeft){
            mview.scrollBy(-200,0);
            bShowLeft = true;
        }else {
            mview.scrollBy(200,0);
            bShowLeft =false;
        }

    }
}

offsetLeftAndRight,offsetTopAndBottom


这两个方法也是view的方法,他们移动的不是内容,而是view自己的位置,方向也不一样,他们是右下为正,左上为负




scrollTo 和 scrollBy 方法使用说明

一、滚动的是什么? scrollgoback.setOnClickListener(new OnClickListener() { @Override public void onCli...
  • L25000
  • L25000
  • 2015年06月03日 12:43
  • 1695

Android View(二)-View的scrollTo()以及scrollBy()说明

在实际开发中,我们总是会遇到需要View滑动的功能,那么可能就会用View的scrollTo(int x, int y)或者scrollBy(int x, int y)方法,但是当你使用这个方法之后,...

View的移动(offsetTopAndBottom,scrollBy,scrollTo)

1.通过直接更改view的left,top,right,bottom的方法(瞬间改变) layout():改变了left,top,right,bottom,并在setFrame()中调用---inv...

Android 滑动scrollBy()和scrollTo()两个方法的简单认识

涉及到滑动,就涉及到VIEW,大家都知道,Android的UI界面都是由一个一个的View以及View的派生类组成,View作为基类,而常用的布局里面的各种布局就是它派生出来的ViewGroup的子类...

scrollTo、scrollBy、getScrollX、getScrollY这4个方法的含义,Scroller的简单用法

scrollTo、scrollBy都是对于x轴负值向右移动、正值向左移动;对于y轴负值向上移动、正值向下移动 scrollTo意思是移动到莫个点,如scrollTo(20,0)意思是将View移动到(...

Android 实现滑动的几种方法(三)scrollTo 与 scrollBy

scrollTo(x,y): 表示移动到一个坐标点(x,y) scrollBy(dx,dy) : 表示移动的增量为dx,dy如果在ViewGroup中使用scrollTo和scrollBy,那么移动...

Android自定义控件9----scrollTo/scrollBy实现滑动和直接绘制滑动的对比使用demo测试

效果图: 项目结构: 代码: MainActivity package com.example.scrolltest; import android.app.Activity; impor...

View 的滑动实现之二(ScrollTo,ScrollBy和Scroller)

在本篇文章的前面,我们讲到了使用Layout的方法实现View的滑动今天给大家介绍一下使用ScrollTo,ScrollBy和Scroller来实现View的滑动。 一、ScrollTo,S...

ListView滑动删除实现之二——scrollTo、scrollBy详解

前言:一个项目终于要结束了,最最坑的莫过于少估了一个巨复杂的页面的开发时间,队长,你这是要多坑队友才行啊……本来定的一个月要看的内容,看来是高估自己能力了,拖拉严重啊,以后要早起了,把早上的时间也利用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ScrollTo,ScrollBy,offsetLeftAndRight,offsetTopAndBottom以及侧滑的简单实现
举报原因:
原因补充:

(最多只允许输入30个字)