Как запустить AnimationDrawable из класса, расширяющего View - PullRequest
0 голосов
/ 23 апреля 2020

Я делаю собственный вид, который отображает счетчик, чтобы показать, что камера фокусируется.

public class ApertureAnimation extends View
{
    private final static String TAG = "ApertureAnimation";
    private AnimationDrawable animationDrawable;

    public ApertureAnimation(Context context)
    {
        super(context);
        init(null, 0);
    }

    public ApertureAnimation(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init(attrs, 0);
    }

    public ApertureAnimation(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init(attrs, defStyle);
    }

    private void init(AttributeSet attrs, int defStyle)
    {
        animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.apperature_focus, null);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        int paddingLeft = getPaddingLeft();
        int paddingTop = getPaddingTop();
        int paddingRight = getPaddingRight();
        int paddingBottom = getPaddingBottom();

        int contentWidth = getWidth() - paddingLeft - paddingRight;
        int contentHeight = getHeight() - paddingTop - paddingBottom;

        if(animationDrawable != null)
        {
            animationDrawable.setBounds(paddingLeft, paddingTop, paddingLeft + contentWidth, paddingTop + contentHeight);
            animationDrawable.start();
            animationDrawable.draw(canvas);
        }
    }

    public void start()
    {
        if(animationDrawable != null)
            animationDrawable.start();
    }

    public void stop()
    {
        if(animationDrawable != null)
            animationDrawable.stop();
    }
}

apperature_focus. xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/apperature_0" android:duration="200" />
    <item android:drawable="@drawable/apperature_30" android:duration="200" />
    <item android:drawable="@drawable/apperature_60" android:duration="200" />
</animation-list>

У меня проблема в том, что при вызове start () отображается только первый кадр. Я могу заставить анимацию работать, если я использую ImageView вне класса, расширяющего View, как это https://developer.android.com/guide/topics/graphics/drawable-animation, но когда я пытаюсь перенести этот код в этот пользовательский компонент пользовательского интерфейса, он не Работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...