Android学习Scroller(三)——控件平移划过屏幕 (Scroller简单使用)

PS:

该篇博客已经deprecated,不再维护,详情请参见 

站在源码的肩膀上全解Scroller工作机制

 http://blog.csdn.net/lfdfhl/article/details/53143114

MainActivity如下:

package cc.cn;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
/**
 * Demo描述:
 * Scroller使用示例——让控件平移划过屏幕
 *
 *
 * 注意事项:
 * 1 在布局中将cc.cn.LinearLayoutSubClass的控件的宽度设置为"fill_parent"
 *   便于观察滑动的效果
 */
public class MainActivity extends Activity {
    private Button mButton;
    private LinearLayoutSubClass mLinearLayoutSubClass;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		mLinearLayoutSubClass=(LinearLayoutSubClass) findViewById(R.id.linearLayoutSubClass);
		mButton=(Button) findViewById(R.id.button);
		mButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				mLinearLayoutSubClass.beginScroll();
			}
		});
	}

}

LinearLayoutSubClass如下:

package cc.cn;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.Scroller;
/**
 * API注释:
 *
 * 1 //第一,二个参数起始位置;第三,四个滚动的偏移量;第五个参数持续时间
 *   startScroll(int startX, int startY, int dx, int dy, int duration)
 *
 * 2 //在startScroll()方法执行过程中即在duration时间内computeScrollOffset()
 *   方法会一直返回true,但当动画执行完成后会返回返加false.
 *   computeScrollOffset()
 *
 * 3 当执行ontouch()或invalidate()或postInvalidate()均会调用该方法
 *   computeScroll()
 *
 */
public class LinearLayoutSubClass extends LinearLayout {
	private Scroller mScroller;
	private boolean flag=true;

	public LinearLayoutSubClass(Context context) {
		super(context);
	}

	public LinearLayoutSubClass(Context context, AttributeSet attrs) {
		super(context, attrs);
		//也可采用该构造方法传入一个interpolator
		//mScroller=new Scroller(context, interpolator);
		mScroller=new Scroller(context);
	}

	@Override
	public void computeScroll() {
		super.computeScroll();
		if(mScroller.computeScrollOffset()){
			scrollTo(mScroller.getCurrX(), 0);
			//使其再次调用computeScroll()直至滑动结束,即不满足if条件
			postInvalidate();
		}
	}

	public void beginScroll(){
		if (flag) {
			mScroller.startScroll(0, 0, -2500, 0, 2500);
			flag = false;
		} else {
			mScroller.startScroll(0, 0, 0, 0, 1500);
			flag = true;
		}
		//调用invalidate();使其调用computeScroll()
		invalidate();
	}

}

main.xml如下:

<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" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="点击后滑动" />

    <cc.cn.LinearLayoutSubClass
        android:id="@+id/linearLayoutSubClass"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
     >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#ff1100"
            android:text="测试Scroller" />
    </cc.cn.LinearLayoutSubClass>

</RelativeLayout>

PS:

该篇博客已经deprecated,不再维护,详情请参见 

站在源码的肩膀上全解Scroller工作机制

 http://blog.csdn.net/lfdfhl/article/details/53143114

时间: 2025-01-18 15:46:07

Android学习Scroller(三)——控件平移划过屏幕 (Scroller简单使用)的相关文章

Android自定义播放器控件VideoView_Android

介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actvity里了,写完一看我靠代码好乱,于是就写了个自定义的播放器控件,支持指定大小,可以横竖屏切换,手动左右滑动快进快退.好了,下面开始. 效果图有点卡,我也不知道为啥..... VideoView介绍 这个是我们实现视频播放最主要的控件,详细的介绍大家百度就去看,这里介绍几个常用的方法. 用于播放视频

Android自定义播放器控件VideoView

介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actvity里了,写完一看我靠代码好乱,于是就写了个自定义的播放器控件,支持指定大小,可以横竖屏切换,手动左右滑动快进快退.好了,下面开始. 效果图有点卡,我也不知道为啥..... VideoView介绍 这个是我们实现视频播放最主要的控件,详细的介绍大家百度就去看,这里介绍几个常用的方法. 用于播放视频

android能实现这种控件吗?

问题描述 android能实现这种控件吗? 这种悬浮窗效果 解决方案 android自定义控件自动换行效果实现 解决方案二: 自身的dialog就是这样效果,还可以用activity做,背景半透明 解决方案三: 当然可以了.百度地图api中的Marker和InfoWindow都可以实现这种效果. 参考:开发"" rel="nofollow">http://blog.csdn.net/column/details/android-jacksen-map.html

界面-Android中布局的控件的位置的问题

问题描述 Android中布局的控件的位置的问题 Android中layout_gravity和layout_marginTop同时设置的话那界面是怎么变化? 在线性布局下,例如一个textView,其android:layout_gravity_设为bottom,android:layout_margin Top_设为100sp,然后其位置就如图所示 然后把android:layout_gravity_设为top,其位置又如图: 但是我的layout_marginTop_一直都设为100sp,

Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全

原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的UI界面基本组件.     一.认识TextView 我们知道前面学习的HelloWorld应用程序中就是使用的TextView来显示一个文本,接下来首先一起来学习TextView的使用方法. TextView的作用就是在界面上显示文本.TextView直接继承了 View,是EditText.Bu

移动开发-怎么实现android游戏控制方向控件?

问题描述 怎么实现android游戏控制方向控件? 需求是做个飞行器控制方向控件.自己做了一个简单的方向控制控件,一个大圈里面放着个小球.但是出现的问题是,第一次touch小球可以实现滑动,但是过后小球会消失.有没有像android游戏控制人物那种控件demo可以给我学习学习?谢谢! 解决方案 http://zhidao.baidu.com/link?url=TotWiDOrpf3HtsMk96P0khoPTe8q8sRkPLFFXvNuSrdQP5Ql7BdGp3jKN1Jx3mpkUGIWM

Android 相对布局 各控件指之间的间距怎么设置

问题描述 Android 相对布局 各控件指之间的间距怎么设置 就是图片上的四个控件之间都有一些间距,本人新手刚刚开始自学Android,不太熟悉布局,求大神指教 主要布局文件如下: android:id="@+id/all_music" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/all_m

Android编程之Button控件用法实例分析_Android

本文实例讲述了Android编程之Button控件用法.分享给大家供大家参考,具体如下: 一.Button概述 android.widget.Button直接继承于android.wdiget.TextView. 直接子类有:CompoundButton. 间接子类有:CheckBox,RadioButton,Switch,ToggleButton. Button类表示一个"按钮"控件."按钮"控件可以被用户按下或者点击,来触发另一个操作. 二.Button的用法

Android自定义加载控件实现数据加载动画_Android

本文实例为大家分享了Android自定义加载控件,第一次小人跑动的加载效果眼前一亮,相比传统的PrograssBar高大上不止一点,于是走起,自定义了控件LoadingView去实现动态效果,可直接在xml中使用,具体实现如下 package com.*****.*****.widget; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.util.