Ошибка с простой анимацией

1

Я попытался запустить AlphaAnimation для ImageView с помощью этого кода:

        ImageView view;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.prueba);

            view=(ImageView)findViewById(R.id.icon);
            view.setAlpha(0x00);        
            view.setVisibility(View.VISIBLE);
            view.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent e) {
                    switch (e.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        Log.i("Down v", "x:" + e.getX() + " y:" + e.getY());
                        view.startAnimation(new AlphaAnimation(0x22, 0xFF));
    //                  break;
                    case MotionEvent.ACTION_MOVE:
                        Log.i("Move", "x:" + e.getX() + " y:" + e.getY());
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.i("Up", "x:" + e.getX() + " y:" + e.getY());
                        view.setAlpha(0x00);
                        break;
                    case MotionEvent.ACTION_OUTSIDE:
                        Log.i("Out", "x:" + e.getX() + " y:" + e.getY());
                        break;
                    default:
                        Log.i("None", "nada");
                    }
                    return false;
                }
            });
            view.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i("Click", "es un click");
                }
            });
        }

этот код должен заставить ImageView появляться при касании, но ничего не происходит. Любое решение?

  • 0
    Что вы видите в журнале?
Теги:

1 ответ

0
Лучший ответ

Это странная вещь в анимации Android.

Вы используете setAlpha() чтобы установить альфу представления setAlpha() 0. В то же время вы используете AlphaAnimation для установки альфа-значения в 1. Это похоже на то, что это сработает. Проблема в том, что они работают над двумя различными структурами. setAlpha() была введена с Honeycomb совместно с ObjectAnimators, в то время как AlphaAnimation была вокруг с Cupcake (возможно, API 1 тоже, но я забыл). ObjectAnimators изменяют фактическое свойство представления, в то время как AlphaAnimation просто изменяет вид представления (еще не запутался?: P).

Во всяком случае, AlphaAnimation не влияет на альфа-свойство представления, как вы думаете. Он оживляет представление от 0 до 1, но свойство все равно 0, тем самым оно все еще невидимо.

У вас есть два варианта.

Сохраните setAlpha() так, как он есть, и используйте ObjectAnimators следующим образом:

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();

Это самый простой и предпочтительный метод. Он работает только на уровнях API 11+. Если это необходимо, то идите.

Другой вариант - удалить setAlpha() и предварительно оживить представление до 0 с длительностью 0. setFillAfter(true) в анимации перед ее запуском. Это позволит убедиться, что он остается невидимым (по умолчанию это может быть правдой, но я не помню).

Надеюсь, это имело смысл.

  • 0
    Благодарю. мои сомнения были решены. Работает хорошо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню