Android: невозможно щелкнуть нижний TextView после перевода анимации в FrameLayout
У меня есть 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) {
}
}
1 ответ
У вас есть ICS в теге, поэтому я предполагаю, что это ваша цель. В этом случае Animation
объекты, которые вы используете, по существу устарели в пользу класса Animator. Старый способ сделать это только перемещает визуальное расположение View
в то время как физическое местоположение остается прежним. Вы должны были бы переместить это самостоятельно, управляя краями представления. Используя ObjectAnimator
с другой стороны, позволяет физически перемещать объект вместе с его визуальным компонентом.
http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html