Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習Scroller(三)——控件平移劃過屏幕 (Scroller簡單使用)

Android學習Scroller(三)——控件平移劃過屏幕 (Scroller簡單使用)

編輯:關於Android編程

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使用示例——讓控件平移劃過屏幕
 * 
 * 參考資料:
 * http://blog.csdn.net/c_weibin/article/details/7438323
 * Thank you very much
 * 
 * 注意事項:
 * 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如下:


    

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved