/** * @file ProgressDisplayerView.java * * @revision: none * * @version 0.0.01 * @author: Zenki (zhajun), zenki2001cn@163.com * @date: 2011-5-30 上午10:05:18 */ package com.easyview.ebook.reader.ui.view; import org.geometerplus.fbreader.fbreader.ActionCode; import com.easyview.ebook.reader.engine.util.Logger; import com.easyview.ebook.reader.ui.controller.IProgressControllerCallback; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * */ public class ProgressDisplayerView extends View { static private final String TAG = "ProgressDisplayerView"; private Paint mPaint; private float mProgress = 0; private RectF mRectDraw; private int mWidth = 0; private int mHeight = 0; private IProgressControllerCallback mControlCallback = null; private final float mRectLeft = 0; private final float mRectTop = 2; private final float mRectRight = 450; private final float mRectBottom = 8; private final int mColorA = 200; private final int mColorR = 0; private final int mColorG = 0; private final int mColorB = 0; public ProgressDisplayerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initPaint(); } public ProgressDisplayerView(Context context, AttributeSet attrs) { super(context, attrs); initPaint(); } public ProgressDisplayerView(Context context) { super(context); initPaint(); } @Override protected void onFinishInflate() { super.onFinishInflate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(mRectDraw, mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: gotoPage(event); break; case MotionEvent.ACTION_UP: // ek1 can't repos ACTION_UP // gotoPage(event); break; case MotionEvent.ACTION_MOVE: // movePage(event); break; default: break; } return super.onTouchEvent(event); } public void update(float percent) { mWidth = getWidth(); mHeight = getHeight(); mProgress = ((float) mWidth * percent); mRectDraw.set(mRectLeft, mRectTop, mProgress, mRectBottom); Logger.dLog(TAG, "mProgress = " + mProgress + " percent = " + percent); invalidate(); } public void setProgressControllerCallback(IProgressControllerCallback callback) { mControlCallback = callback; } private void movePage(MotionEvent event) { float px = event.getX(); float percent = px / (float) mWidth; Logger.dLog(TAG, "px = " + px + " percent = " + percent); } private void gotoPage(MotionEvent event) { float px = event.getX(); float percent = px / (float) mWidth; Logger.dLog(TAG, "px = " + px + " percent = " + percent); if (mControlCallback != null) { mControlCallback.gotoPage(percent); } } private void initPaint() { if (null == mPaint) { mPaint = new Paint(); mPaint.setColor(Color.argb(mColorA, mColorR, mColorG, mColorB)); } if (null == mRectDraw) { mRectDraw = new RectF(mRectLeft, mRectTop, mProgress, mRectBottom); } } }