package my.navilayout;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.LinearLayout;
public class NaviLayout extends LinearLayout {
private String TAG = "NaviLayout";
private int SPEED = 50;
private Context mContext;
private Rect mNowRect;
private Rect mEndRect;
private int mPostion;
private BitmapDrawable mSelecter;
public NaviLayout(Context context) {
this(context, null);
}
public NaviLayout(Context context, AttributeSet attrs) {
super(context, attrs);
Log.d(TAG, "NaviLayout");
init(context);
}
private void init(Context context) {
Log.d(TAG, "init");
mContext = context;
mSelecter = new BitmapDrawable(BitmapFactory.decodeResource(
mContext.getResources(), R.drawable.selected_line));
mNowRect = new Rect();
mEndRect = new Rect();
mPostion = 0;
//調用這個接口,可以不設置背景,也可以讓系統調用onDraw
setWillNotDraw(false);
}
protected void onLayout(boolean paramBoolean, int paramInt1, int paramInt2,
int paramInt3, int paramInt4) {
super.onLayout(paramBoolean, paramInt1, paramInt2, paramInt3, paramInt4);
Log.d(TAG, "onLayout");
getChildAt(0).getHitRect(mNowRect);
getChildAt(0).getHitRect(mEndRect);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d(TAG, "onMeasure");
}
public int getPosition() {
return mPostion;
}
public void moveLeft() {
if (mPostion > 0) {
mPostion--;
getChildAt(mPostion).getHitRect(mEndRect);
postInvalidate();
}
}
public void moveTo(int pos) {
if (pos < 0 || pos > getChildCount() - 1) {
return;
}
mPostion = pos;
getChildAt(pos).getHitRect(mEndRect);
postInvalidate();
}
public void moveRight() {
if (mPostion < getChildCount() - 1) {
mPostion++;
getChildAt(mPostion).getHitRect(mEndRect);
postInvalidate();
}
}
// 對於vievgroup需要設置一個背景,纔會調用onDraw
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.d(TAG, "onDraw");
if (mNowRect.right > mEndRect.right) {
mNowRect.left -= SPEED;
mNowRect.right -= SPEED;
if (mNowRect.right <= mEndRect.right) {
mNowRect.right = mEndRect.right;
mNowRect.left = mEndRect.left;
}
postInvalidateDelayed(50);
} else if (mNowRect.right < mEndRect.right) {
mNowRect.left += SPEED;
mNowRect.right += SPEED;
if (mNowRect.right >= mEndRect.right) {
mNowRect.right = mEndRect.right;
mNowRect.left = mEndRect.left;
}
postInvalidateDelayed(50);
}
mSelecter.setBounds(mNowRect);
mSelecter.draw(canvas);
}
}
自定義可滑動導航欄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.