0
我正在創建一個自定義搜索欄,就像主題爲Google Play音樂的新材料中的一個。我已經完成了將交互性帶到seekbar拇指所需的內容。但問題是當視圖首先膨脹並附加到窗口時,進度條被繪製,但拇指未被繪製。自定義seekbar拇指不會在充氣後顯示
我在大量的研究和閱讀後第一次寫了一個觀點。知道這種行爲的原因是很好的。
我寫的seekbar的代碼就在這裏。
public class SizableSeekBar extends DebugSeekBar {
public static String TAG = "SizableSeekBar";
/**
* Listener Set Using setOnSeekBarChangeListner(OnSeekBarChangeListener
* listener)
*/
private OnSeekBarChangeListener mListener;
/**
* The Thumb Drawable used that will be resized
*/
private Drawable mThumb;
/**
* Animator used to animate the grow animation
*/
private ValueAnimator growAnimator;
/**
* Animator used to animate the shrink animation
*/
private ValueAnimator shrinkAnimator;
/**
* Interpolator used for shrink and grow animation
*/
private TimeInterpolator mInterpolator = new AccelerateDecelerateInterpolator();
/**
* Listener for animator to update size of the Drawable
*/
/**
* Maximum Thumb Size Ratio to use for resizing the Thumb
*/
private float mMaxThumbSizeRatio = 2f;
/**
* Current Thumb size Ratio
*/
private float mCurrentThumbSizeRatio = 1f;
private ValueAnimator.AnimatorUpdateListener mAnimationUpdateListner = new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
mCurrentThumbSizeRatio = ((Float) animator.getAnimatedValue())
.floatValue();
mThumb.setLevel((int) (10000 * (mCurrentThumbSizeRatio/mMaxThumbSizeRatio)));
SizableSeekBar.this.invalidate();
}
};
/**
* Internal OnSeekbarChangeListener used for grow and shrink animation and
* call respective Callbacks of mListner
*/
private OnSeekBarChangeListener mInternalListener = new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e(TAG, "Stoping Tracking");
startThumbShrink();
if (mListener != null)
mListener.onStopTrackingTouch(SizableSeekBar.this);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.e(TAG, "Starting Tracking");
startThumbGrow();
if (mListener != null)
mListener.onStartTrackingTouch(SizableSeekBar.this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (mListener != null)
mListener.onProgressChanged(SizableSeekBar.this, progress,
fromUser);
}
};
public SizableSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
super.setOnSeekBarChangeListener(mInternalListener);
// fixes wrong thumboffset
setThumbOffset(mThumb.getIntrinsicWidth()/2);
}
public SizableSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
super.setOnSeekBarChangeListener(mInternalListener);
// fixes wrong thumboffset
setThumbOffset(mThumb.getIntrinsicWidth()/2);
}
@Override
public void setOnSeekBarChangeListener(OnSeekBarChangeListener listener) {
mListener = listener;
}
/**
* Sets the Interpolator to be used for grow and shrink animations
*
* @param interpolator
* The interpolator which is to be set
*
*/
public void setInterpolator(TimeInterpolator interpolator) {
mInterpolator = interpolator;
}
@Override
public void setThumb(Drawable thumb) {
if (thumb == null)
return;
// If Thumb Drawable is not ScaleDrawable then wrap it up in new
// ScaleDrawable
if (!ScaleDrawable.class.isInstance(thumb))
thumb = new ScaleDrawable(thumb, Gravity.CENTER, 1f, 1f);
mThumb = thumb;
super.setThumb(thumb);
mThumb.setLevel((int) (10000 * (1.f/mMaxThumbSizeRatio)));
}
/**
* Starts the thumb grow animation
*/
private void startThumbGrow() {
if (shrinkAnimator != null) {
shrinkAnimator.cancel();
shrinkAnimator = null;
}
growAnimator = ValueAnimator.ofFloat(1, mMaxThumbSizeRatio);
growAnimator.setInterpolator(mInterpolator);
growAnimator.addUpdateListener(mAnimationUpdateListner);
growAnimator.setDuration(300);
growAnimator.start();
}
/**
* Starts the thumb shrink animation
*/
private void startThumbShrink() {
if (growAnimator != null) {
growAnimator.cancel();
growAnimator = null;
}
shrinkAnimator = ValueAnimator.ofFloat(mCurrentThumbSizeRatio, 1f);
shrinkAnimator.setInterpolator(mInterpolator);
shrinkAnimator.addUpdateListener(mAnimationUpdateListner);
shrinkAnimator.setDuration(300);
shrinkAnimator.start();
}
}
我可以知道downvote的原因嗎? – 2014-11-08 09:09:17