`
ipjmc
  • 浏览: 707479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

View.scrollBy()与View.scrollTo()的使用

阅读更多
       scrollTo()和scrollBy()都是View的public成员函数,使用这两个函数可以达到同样的目的,只是使用方式不同。
        public void scrollBy (int x, int y),将View的Content偏移(x,y)。x控制左右方向的偏移,y控制上下方向的偏移。例如当x>0,y=0时,向右移动x像素,当x<0,y=0时,向左移动x像素,而View的大小和位置不发生改变。如果Content超出了View的范围,则超出的部分会被挡住。
        public void scrollTo (int x, int y),将View的Content的位置移动到(x,y),而View的大小和位置不发生改变。如果Content超出了View的范围,则超出的部分会被挡住。

        举个例子说明情况,这个例子有两个控件可以Scroll,一个是TextView,一个是ListView,另外用两个Button控制scroll的方向(向上或向下)

main.xml

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

    <TextView android:id="@+id/text"
        android:text="@string/hello" android:layout_marginBottom="100dip"
        android:layout_width="fill_parent" android:layout_height="60dp"
        android:gravity="center" />
    
    <Button android:id="@+id/up" android:text="UP"
	    android:layout_width="fill_parent" android:layout_height="wrap_content"/>
    
    <Button android:id="@+id/down" android:text="DOWN"
	    android:layout_width="fill_parent" android:layout_height="wrap_content"/>
    
    <ListView android:id="@+id/list"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:cacheColorHint="#00000000" android:entries="@array/names"/>
</LinearLayout>


package com.ipjmc.demo.scroll;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class ScrollActivity extends Activity implements View.OnClickListener{
	
	private static final String TAG = "Hello";
	private Button mUp, mDown;
	private TextView mTextView;
	private ListView mListView;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mTextView = (TextView) findViewById(R.id.text);
		mUp = (Button) findViewById(R.id.up);
		mDown = (Button) findViewById(R.id.down);
		mListView = (ListView) findViewById(R.id.list);

                //预先向下滚动到50,在android2.2上,可以用手指拖动一下ListView感受一下效果
		mListView.scrollTo(0, 50);
		
		mUp.setOnClickListener(this);
		mDown.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.up: //向上滚动
			mTextView.scrollBy(0, 10);
			mListView.scrollBy(0, 10);
			Log.i(TAG, "mTextView.getScrollY() = " + mTextView.getScrollY()
				   + ", mListView.getBaseline() = " + mListView.getScrollY());

			break;
		case R.id.down://向下滚动
			mTextView.scrollBy(0, -10);
			mListView.scrollBy(0, -10);
			
			Log.i(TAG, "mTextView.getScrollY() = " + mTextView.getScrollY()
					   + ", mListView.getBaseline() = " + mListView.getScrollY());
			break;
		default:
			break;
		}
	}
}


        实验的结果是:调用scrollTo()和scrollBy()可以到达预想的效果,但是因为用手指在ListView上拖动时,ListView也会滚动,貌似和scrollTo()/scrollBy()冲突,在android2.2和4.0上都有问题。所以最好不要在ListView上调用这两个函数,以免出现莫名奇妙的问题。同样也不能通过getScrollY()获取ListView滚动的位置。
  • 大小: 7.4 KB
0
0
分享到:
评论
1 楼 xiaodatao 2013-06-26  
楼主说法有误,当x>0,y=0时,向右移动x像素,如:scrollBy(10, 0)向左移10px,而x<0,y=0时,向右移动。

相关推荐

    android scrollTo,scrollBy与Scroller demo

    与`scrollTo`不同,`scrollBy`允许开发者进行增量滚动,每次调用都会累积之前的滚动距离,因此可以用于实现连续的滚动效果。同样,`scrollBy`也不会自动添加动画。 3. `Scroller`类: `Scroller`是Android提供的一...

    布局滑动 scrollTo 和 scrollBy 应用DEMO

    android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明 对应的博文地址:http://blog.csdn.net/vipzjyno1/article/details/24577023

    一个用例理解MotionEvent.getX()/getRawX/getScrollY()/childView.scrollBy((int) DX, (int) 0)

    1. 使用scrollTo/scrollBy  只能影响View的内容移动,并不能改变View本身的位置  2. setX , setY: 设置控件相对于父控件位置 3. 动画 2. Api 综合理解: getRawX: 获取当前控件相对于屏幕原点坐标 getX: 获取当前...

    Android scrollTo和scrollBy方法使用解析

    在Android开发中,View类提供了两个关键方法,用于在用户交互或者编程时改变View的位置,它们分别是`scrollTo`和`scrollBy`。这两个方法在处理滚动操作时扮演着重要角色,但它们的工作原理和使用场景有所不同。 ...

    scrollTo(),scrollBy(),getScrollX(), getScrollY() 应用 Demo

    Android View api - scrollTo(),scrollBy(),getScrollX(), getScrollY(),博客地址:http://blog.csdn.net/amoscxy/article/details/77191151

    Android View事件机制 21问21答

    3. **Scroller**:Scroller是为了弥补scrollTo和scrollBy的滑动效果不佳,它可以与View的computeScroll配合,实现平滑的滚动动画效果,提高用户体验。 4. **ScrollTo与ScrollBy**:ScrollTo执行绝对滑动,将View的...

    View滑动的三种实现方法

    本文将详细介绍三种实现View滑动的方法:ScrollBy/ScrollTo、动画(Animation)以及修改LayoutParams。 1. **ScrollBy/ScrollTo方法** `ScrollBy()` 和 `ScrollTo()` 是 Android 中 View 类提供的两个方法,用于...

    Android view面试专题.pdf

    - `scrollTo/scrollBy`:移动View的内容,而不是View本身。`scrollBy`会使内容相对于当前视图位置移动。 - `Scroller`:配合`computeScroll`方法实现平滑滚动效果,它提供了一个插值计算过程,用于在重绘期间逐步...

    view面试专题.docx

    2. **View与ViewRoot的关联** - 在`handleResumeActivity`时,`Activity`的`onResume`方法被调用。 - `WindowManager`将`DecorView`设置给`ViewRootImpl`。 - 此时`DecorView`加载到了`Window`中。 3. **View的...

    Android View的六种移动方式

    2. **offsetTopAndBottom(offsetY)**:与`offsetLeftAndRight`类似,`offsetTopAndBottom`用于在垂直方向上移动View。`offsetY`参数决定View在垂直方向上的位移。正数意味着View向下移动,负数则表示向上移动。同样...

    Android Scroller完全解析

    总结一下,`scrollTo()`和`scrollBy()`方法都是用来改变View的偏移量,但它们的区别在于: - `scrollTo()`是相对于初始位置进行滚动,将视图移动到指定坐标。 - `scrollBy()`是基于当前偏移量进行滚动,相对于当前...

    ScroolDemo ScroolDemo

    android view 中滚动scrollTo和scrollBy mScrollX:表示离视图起始位置的x水平方向的偏移量 mScrollY:表示离视图起始位置的y垂直方向的偏移量 分别通过getScrollX() 和getScrollY()方法获得。 注意:mScrollX和...

    自定义view滑动1

    在Android开发中,自定义View时常常需要处理滑动效果,本文将探讨三种常见的实现滑动的方法:通过scollTo和scrollBy与Scroller的配合、使用动画以及改变LayoutParams。每种方法都有其适用场景,下面我们将逐一进行...

    Android仿天天动听歌曲自动滚动view

    首先自己想了下Android要滚动的那就是scroller类或者scrollto、scrollby结合了,或者view.layout()方法,或者使用动画。但是要循环滚动,貌似这些到最后一行滚动到第一行都有往回滚的效果,都不是很好的解决方法。...

    仿淘宝头条View垂直滚动

    可以使用`scrollBy()`或`scrollTo()`方法来实现滚动。 4. **动画(Animation)**:为了让滚动效果更加平滑,我们可以使用Android的动画框架,如ValueAnimator或ObjectAnimator,来实现内容的平滑滚动。 5. **数据...

    全面的Android view相关知识汇总整理

    - `scrollTo()`和`scrollBy()`:滚动View的内容,而不是View本身的位置,注意参照物的区别。 - `Scroller`:不直接滑动View,而是提供平滑滚动的计算,配合`computeScroll()`方法实现视图滚动。 2. **View的事件...

    用Scroller完成一个简单的ViewPager

    computeScroll()是在View的draw的时候调用的,而invalidate会导致View重绘,所以在重写computeScroll()之后,我们要使用invalidate()来间接调用它。 过程为:invalidate()-&gt;draw()-&gt;computeScroll() 3、...

    view的滑动

    view的滑动在安卓中特别多,基本有三种方式: 1.通过view本身提供的scrollTo/scrollBy方法实现滑动。 2.通过给view添加平移动画实现滑动。 3.通过改变view的layoutparams使得view重新布局,从而实现滑动。

Global site tag (gtag.js) - Google Analytics