package com.dahuo.learn.header; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import in.srain.cube.views.ptr.PtrFrameLayout; import in.srain.cube.views.ptr.PtrUIHandler; import in.srain.cube.views.ptr.indicator.PtrIndicator; import in.srain.cube.views.ptr.indicator.PtrTensionIndicator; public class RentalsSunHeaderView extends View implements PtrUIHandler { private RentalsSunDrawable mDrawable; private PtrFrameLayout mPtrFrameLayout; private PtrTensionIndicator mPtrTensionIndicator; public RentalsSunHeaderView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public RentalsSunHeaderView(Context context) { super(context); init(); } public RentalsSunHeaderView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void setUp(PtrFrameLayout ptrFrameLayout) { mPtrFrameLayout = ptrFrameLayout; mPtrTensionIndicator = new PtrTensionIndicator(); mPtrFrameLayout.setPtrIndicator(mPtrTensionIndicator); } private void init() { mDrawable = new RentalsSunDrawable(getContext(), this); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = mDrawable.getTotalDragDistance() * 5 / 4; heightMeasureSpec = MeasureSpec.makeMeasureSpec(height + getPaddingTop() + getPaddingBottom(), MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { int pl = getPaddingLeft(); int pt = getPaddingTop(); mDrawable.setBounds(pl, pt, pl + right - left, pt + bottom - top); } @Override public void onUIReset(PtrFrameLayout frame) { mDrawable.resetOriginals(); } @Override protected void onDraw(Canvas canvas) { mDrawable.draw(canvas); float percent = mPtrTensionIndicator.getOverDragPercent(); } @Override public void onUIRefreshPrepare(PtrFrameLayout frame) { } @Override public void onUIRefreshBegin(PtrFrameLayout frame) { mDrawable.start(); float percent = mPtrTensionIndicator.getOverDragPercent(); mDrawable.offsetTopAndBottom(mPtrTensionIndicator.getCurrentPosY()); mDrawable.setPercent(percent); invalidate(); } @Override public void onUIRefreshComplete(PtrFrameLayout frame) { float percent = mPtrTensionIndicator.getOverDragPercent(); mDrawable.stop(); mDrawable.offsetTopAndBottom(mPtrTensionIndicator.getCurrentPosY()); mDrawable.setPercent(percent); invalidate(); } @Override public void onUIPositionChange(PtrFrameLayout frame, boolean isUnderTouch, byte status, PtrIndicator ptrIndicator) { float percent = mPtrTensionIndicator.getOverDragPercent(); mDrawable.offsetTopAndBottom(mPtrTensionIndicator.getCurrentPosY()); mDrawable.setPercent(percent); invalidate(); } @Override public void invalidateDrawable(Drawable dr) { if (dr == mDrawable) { invalidate(); } else { super.invalidateDrawable(dr); } } }