Я попытался запустить 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 появляться при касании, но ничего не происходит. Любое решение?
Это странная вещь в анимации 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)
в анимации перед ее запуском. Это позволит убедиться, что он остается невидимым (по умолчанию это может быть правдой, но я не помню).
Надеюсь, это имело смысл.