我对动画非常陌生,并试图在thread.The动画中实现thread.The动画是为了创建一个闪烁效果(如RippleEffect),这是在无限循环中。
private void hidePressedRing() {
pressedAnimator.setFloatValues(pressedRingWidth, 0f);
pressedAnimator.start();
}
private void showPressedRing() {
pressedAnimator.setFloatValues(animationProgress, pressedRingWidth);
pressedAnimator.start();
}下面的代码片段位于run()方法中的线程处理程序()中。
if (pressed) {
showPressedRing();
pressed=false;
} else {
hidePressedRing();
pressed=true;
}如何使用循环中的objectAnimator实现对圆的闪烁效应;
发布于 2015-06-22 09:53:09
根据您的要求更改下面的代码..。
public class ProgressCircle extends View {
private Paint paint;
private int width;
private int height;
private int radius;
private int cx;
private int cy;
private float tempRadius;
public ProgressCircle(Context context) {
super(context);
init();
}
public ProgressCircle(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ProgressCircle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
width = right - left;
height = bottom - top;
cx=width/2;
cy=height/2;
radius=Math.min(width,height)/2;
}
private Runnable runnable=new Runnable() {
@Override
public void run() {
tempRadius++;
if(tempRadius==radius){
tempRadius=0;
}
invalidate();
handler.postDelayed(this,50);
}
};
private Handler handler=new Handler();
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
handler.post(runnable);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacks(runnable);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(cx,cy,tempRadius,paint);
}
}https://stackoverflow.com/questions/30976259
复制相似问题