我有一个包含在RelativeLayout中的imageview。单击图像视图时,我会使用平移动画为整个RelativeLayout设置动画以将其向下移动。
当我再次点击图像视图(在它的新位置)时,它应该将其向上移动,但事实并非如此。但是,如果我单击imageview开始的位置,它会将整个“面板”移回。为什么imageview不会随相对布局移动...至少就其可点击性而言。实际图像正在移动,但可点击的位置不是。
这是布局的xml:
<RelativeLayout
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_width="fill_parent"
android:layout_height="120px"
android:layout_marginTop="-106px"
android:id="@+id/chatbox"
android:visibility="invisible">
<TextView
android:layout_width="fill_parent"
android:layout_height="106px"
android:background="#000000"
android:id="@+id/chattext" />
<ImageView
android:layout_width="20px"
android:layout_height="14px"
android:id="@+id/chatbubble"
android:layout_below="@id/chattext"
android:src="@drawable/chatbubble" />
</RelativeLayout>
编辑:我应该添加我正在使用Animation.setFillAfter(true)在动画完成后将面板保持在原位。
答案 0 :(得分:2)
这是因为动画实际上不影响视图位置,它们只是绘制它们。所以要处理新地方的点击,你必须在那里放置一些东西(即不可见的FrameLayout)。或者您可以在动画完成时更改视图边距,因此视图实际上将移动到该位置。
答案 1 :(得分:0)
我遇到了同样的问题,我找到的最佳解决方案是在动画中添加一个AnimationListener,然后在Konstantin Burov所说的那个监听器中自己移动视图:
animation.setFillAfter(false);
AnimationListener animListener = new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
RelativeLayout.LayoutParams relativeLayoutParams = (LayoutParams) yourView.getLayoutParams();
//To avoid the flicker
yourView.clearAnimation();
relativeLayoutParams.setMargins(0, 0, 0, Utils.dpToPx(activity, newPositionDp);
yourView.setLayoutParams(relativeLayoutParams);
}
};
animation.setAnimationListener(animListener);
Utils.dpToPx也可能有用:
public final static int dpToPx(Context context, int dp) {
return ((int)((dp * context.getResources().getDisplayMetrics().density) + 0.5));
}