ObjectAnimator внутри потока

Я новичок в анимации и пытался реализовать objectAnimator внутри потока. Анимация предназначена для создания мигающего эффекта (например, 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 в цикле;


person DRY Believer    schedule 22.06.2015    source источник
comment
Вы хотите волновой эффект? или любой другой? Объясните, какой тип анимации вы хотите?   -  person Chandrakanth    schedule 22.06.2015
comment
эффект мерцания на круге с увеличением и уменьшением его радиуса   -  person DRY Believer    schedule 22.06.2015
comment
Для этого лучше реализовать пользовательский вид   -  person Chandrakanth    schedule 22.06.2015
comment
да, я использовал пользовательский вид... но работает ли ObjectAnimation внутри потока??   -  person DRY Believer    schedule 22.06.2015
comment
Я этого не знаю, но мы можем добиться этого без использования аниматора.   -  person Chandrakanth    schedule 22.06.2015
comment
пожалуйста скажи?? @Чандракант   -  person DRY Believer    schedule 22.06.2015


Ответы (1)


Измените приведенный ниже код в соответствии с вашими требованиями...

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);
    }
}
person Chandrakanth    schedule 22.06.2015