直播电商软件开发,圆形旋转动画

it2025-12-09  5

直播电商软件开发,圆形旋转动画的相关代码

import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.support.annotation.Nullable; import android.support.v7.widget.AppCompatImageView; import android.util.AttributeSet; import android.view.animation.LinearInterpolator; /** * Created AY 2018-11-26 设置圆形ImageView以及旋转动画 */ public class CircleImageView extends AppCompatImageView { private ObjectAnimator objectAnimator; public static final int STATE_PLAYING = 1;//正在播放 public static final int STATE_PAUSE = 2;//暂停 public static final int STATE_STOP = 3;//停止 public int state; private float width; private float height; private float radius; private Paint paint; private Matrix matrix; public CircleImageView(Context context) { this(context, null); } public CircleImageView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint = new Paint(); paint.setAntiAlias(true); //设置抗锯齿 matrix = new Matrix(); //初始化缩放矩阵 init(); } private void init() { state = STATE_STOP; objectAnimator = ObjectAnimator.ofFloat(this, "rotation", 0f, 359f);//添加旋转动画,旋转中心默认为控件中点 objectAnimator.setDuration(36000);//设置动画时间 objectAnimator.setInterpolator(new LinearInterpolator());//动画时间线性渐变 objectAnimator.setRepeatCount(ObjectAnimator.INFINITE); objectAnimator.setRepeatMode(ObjectAnimator.RESTART); } public void playAnim() { if (state == STATE_STOP) { objectAnimator.start();//动画开始 state = STATE_PLAYING; } else if (state == STATE_PAUSE) { objectAnimator.resume();//动画重新开始 state = STATE_PLAYING; } } public void pauseAnim(){ if(state == STATE_PLAYING){ objectAnimator.pause();//动画暂停 state = STATE_PAUSE; } } public void stopAnim() { objectAnimator.end();//动画结束 state = STATE_STOP; } /** * 测量控件的宽高,并获取其内切圆的半径 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getMeasuredWidth(); height = getMeasuredHeight(); radius = Math.min(width, height) / 2; } @Override protected void onDraw(Canvas canvas) { paint.setShader(initBitmapShader());//将着色器设置给画笔 canvas.drawCircle(width / 2, height / 2, radius, paint);//使用画笔在画布上画圆 } /** * 获取ImageView中资源图片的Bitmap,利用Bitmap初始化图片着色器,通过缩放矩阵将原资源图片缩放到铺满整个绘制区域,避免边界填充 */ private BitmapShader initBitmapShader() { Bitmap bitmap = ((BitmapDrawable) getDrawable()).getBitmap(); BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); float scale = Math.max(width / bitmap.getWidth(), height / bitmap.getHeight()); matrix.setScale(scale, scale);//将图片宽高等比例缩放,避免拉伸 bitmapShader.setLocalMatrix(matrix); return bitmapShader; } }

以上就是直播电商软件开发,圆形旋转动画的相关代码, 更多内容欢迎关注之后的文章

最新回复(0)