View的基礎知識和Scroller的使用
阿新 • • 發佈:2018-11-16
前言
瞭解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(); } } }