1. 程式人生 > >View的基礎知識和Scroller的使用

View的基礎知識和Scroller的使用

前言

瞭解View的基礎知識是深入學習自定義View的鋪墊,下面將介紹一些關於View的概念和一些重要引數,如位置引數。還會介紹Android的座標系統,和自定義View中彈性滑動常用的Scroller類的使用。

View是什麼



View的重要引數



Android的座標系統

Android中的座標系分為兩種,一絕對座標系即螢幕座標,二相對座標即View相對父容器的座標。兩種座標系都是以向右為x軸正方向以向下為y軸正方向,絕對座標系的原點為螢幕左上角,相對座標系的原點為父容器左上角。


Scroller的使用方法

package com.example.test.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.Scroller;

public class MovtionView extends LinearLayout {

	private Scroller mScroller;
	private Context mContext;
	private int mTranX;
	private int mTranY;

	public MovtionView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		mContext = context;
		init();
	}

	public MovtionView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public MovtionView(Context context) {
		this(context, null);
	}

	private void init() {
		mScroller = new Scroller(mContext);
		mTranX = (int) getTranslationX();
		mTranY = (int) getTranslationY();
		setClickable(true);
	}

	public void smoothScollBy(int dx, int dy) {
		mScroller.startScroll(mTranX, mTranY, dx, dy, 2000);
		invalidate();
	}

	@Override
	public void computeScroll() {
		if (mScroller.computeScrollOffset()) {
			setTranslationX(mScroller.getCurrX());
			setTranslationY(mScroller.getCurrY());
			postInvalidate();
		} else {
			mTranX = (int) getTranslationX();
			mTranY = (int) getTranslationY();
		}
	}

}