Почему моя анимация оставляет след?

Попробуйте __weak, если вы получите какое-либо предупреждение относительно цикла сохранения, иначе используйте __block

Person *strongPerson = [Person new];
__weak Person *weakPerson = person;

Теперь вы можете ссылаться на объект weakPerson внутри блока.

9
задан kiamlaluno 29 October 2012 в 20:40
поделиться

4 ответа

Возможно, это немного устарело, но я только что нашел это:

http://groups.google.com/group/android-developers/browse_thread/ thread / 5481450f8b71a26c / e750730b9953d9a8? lnk = gst & q = animation + leaves + trails # e750730b9953d9a8

Не уверен, какую версию Android вы используете, но это может быть ошибка в библиотеках Android!

Похоже, вот в чем проблема! :)

... Dontcha просто обожает, когда это не твоя вина! : D

3
ответ дан 4 December 2019 в 13:49
поделиться

Я бы предложил использовать SurfaceView для анимации. Он имеет двойную буферизацию, поэтому при правильном использовании он должен устранить мерцание. Если вам нужен пример, демо LunarLander, включенное в sdk, действительно хорошо это показывает. Кроме того, если у вас есть более конкретный вопрос с кодом, задавайте его.

Что касается общей производительности Android, вполне возможно, что у вас будет достаточно высокая частота кадров, поэтому вы не ожидаете слишком многого.

0
ответ дан 4 December 2019 в 13:49
поделиться

Фактически не видя проблемы, звучит так, будто вы не очищаете буфер дисплея перед записью следующего кадра. Для меня это не похоже на проблему с производительностью.

Вы контролируете, выполняет ли устройство двойную буферизацию или нет?

Учитывая, что оно работает на эмуляторе, это может указывать либо на проблему с эмулятором, либо на ошибка в вашем коде, которая не проявляется в эмуляторе (что, я полагаю, технически проблема эмулятора!), а не проблема производительности.

0
ответ дан 4 December 2019 в 13:49
поделиться

Это происходит и со мной. Я использую эмулятор, использующий 1.6 с API Google, и я только что подтвердил, что это происходит на Nexus One под управлением FRF83. Вот соответствующий код:

Animation a = new TranslateAnimation(0.0f, 0.0f, 100.0f, 0.0f);
a.setDuration(2000);
this.myView.startAnimation(a);

Вот соответствующий код для инстанцирования представления:

View v = new View(this.getApplication());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 80);
v.setLayoutParams(params);
v.setBackgroundColor(0xFFFF0000);
//
LinearLayout layout = (LinearLayout)this.findViewById(R.id.theLayout);
layout.addView(v);
//
v.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
        // TODO Auto-generated method stub
        doAnimation();
    }
});
//
myView = v;

Так что, в основном, двойная буферизация и т.д. обрабатывается ОС, и я не имею никакого контроля над этим.

0
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: