前言
了解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();
}
}
}