Android: невозможно щелкнуть нижний TextView после перевода анимации в FrameLayout

1

У меня есть FrameLayout, в котором я разместил два идентичных TextViews. Я хочу, чтобы иметь возможность перевести первый вид влево (что я сделал и работает как шарм). Однако я хочу, чтобы можно было щелкнуть TextView под ним, чтобы выполнить действие.

Когда я пытаюсь щелкнуть нижний TextView, верхний TextView снова будет нажат. У меня такое чувство, потому что способ визуализации анимации и изменение фактической позиции x, y не вступают в силу.

Это то, что у меня есть до сих пор.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="50dip"
        android:text="@string/hello" 
        android:id="@+id/unbutt"
        android:gravity="right|center_vertical"
        />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="50dip"
        android:text="@string/hello" 
        android:id="@+id/butt" />

</FrameLayout>

Код:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;

public class Main extends Activity implements AnimationListener, OnClickListener
{
    /** Called when the activity is first created. */

    private class BottomViewClick implements OnClickListener
{

    @Override
    public void onClick(View v) {
        Toast.makeText(v.getContext(), "Second Click", 5).show();
    }

}

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

    TextView tv = (TextView)findViewById(R.id.butt); 
    tv.setBackgroundColor(0xffb71700);
    tv.setOnClickListener(this);

    TextView tv2 = (TextView)findViewById(R.id.unbutt); 
    tv2.setBackgroundColor(0xffb700ff);
    tv2.setOnClickListener(new BottomViewClick());

}

    private boolean revealed = false;

    @Override
    public void onClick(View v) {
        Animation a ;
        if(!revealed)
            a = new TranslateAnimation(0f, -200f, 0f, 0f);
        else
            a = new TranslateAnimation(-200f, 0f, 0f, 0f);
        a.setDuration(500);
        a.setFillAfter(true);
        a.setAnimationListener(this);
        v.startAnimation(a);
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        if(revealed)
            revealed = false;
        else
            revealed = true;
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }

    @Override
    public void onAnimationStart(Animation animation) {
    }
}
Теги:
textview
animation
framelayout
android-4.0

1 ответ

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

У вас есть ICS в теге, поэтому я предполагаю, что ваша цель. В этом случае объекты Animation, которые вы используете, по существу устарели в пользу класса Animator. Старый способ сделать это только перемещает визуальное расположение View, в то время как физическое местоположение остается неизменным. Вам придется переместить его самостоятельно, манипулируя полями представления. С другой стороны, с помощью ObjectAnimator позволяет физически перемещать объект вместе с визуальным компонентом.

http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html

Ещё вопросы

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