又是清明雨上,折菊寄到你身旁,把你最爱的歌来轻轻唱。
今天订餐无意中看到美团外卖有个显示订单进度的view,效果还不错,便随手写了下。
这里我们是继承LinearLayout来实现的。
定义父view的宽高与子view的宽高相同。
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int viewWidth = mView.getMeasuredWidth(); int viewHeight = mView.getMeasuredHeight(); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (widthMode == MeasureSpec.AT_MOST) { widthSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, viewWidth, getResources().getDisplayMetrics()); } if (heightMode == MeasureSpec.AT_MOST) { heightSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, viewHeight, getResources().getDisplayMetrics()); } setMeasuredDimension(widthSize, heightSize); }这里点击时x号是有个缩放动画的,可能gif图不是太明显。
/** * 点击x号缩放动画 */ private void initScaleAnimation() { mScaleAnimator = ValueAnimator.ofFloat(1.0f, 0.0f); mScaleAnimator.setDuration(SCALE_ANIMATION_TIME); if (mViewState == ViewStateEnum.CLOSE) { mScaleAnimator.setEvaluator(new TypeEvaluator<Float>() { @Override public Float evaluate(float fraction, Float startValue, Float endValue) { return endValue - fraction * (endValue - startValue); } }); } mScaleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); mCloseImageView.setScaleX(value); mCloseImageView.setScaleY(value); } }); }本篇博文主要知识点还是动画,包括对ValueAnimator的基本使用,还有自定义Evaluator,希望大家通过本篇博文能够有所收获。另外我们也只是大概写了下实现的一些主要代码,所以有需要源码的童鞋可以去github下载。
https://github.com/kuangxiaoguo0123/FloatingOrderView