我正在使用translate
动画:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="-75%p"
android:toXDelta="0%p"
android:duration="1000" />
</set>
基本ImageView
。此动画将从左侧滑出图像,直到它到达屏幕的右边缘。我在OnClickListener
上设置了ImageView
,可以将其从滑出中移开,并且工作正常。
问题:ImageView
似乎实际移动它的坐标,但它只是看起来就像它正在移动一样。当ImageView
仅部分可见(等待屏幕上显示动画)时,如果我点击ImageView
的区域,如果它被滑出,则动画开始({{1}被解雇了。)
我没有点击OnClickListener
!
问题:
那么,带有动画的组件实际上并没有移动?
我如何处理这个onClick事件,因为当按下用户看不到ImageView
的屏幕时动画会发生意外?
答案 0 :(得分:4)
你是对的,组件不会真正移动,只有它们渲染的位图缓冲区。动画完屏幕后,您可以使用View.setVisibility(View.GONE);
使其真正消失。
如果您的目标是让视图的一小部分仍然可见,以允许用户将其滑回屏幕,则可以考虑使用SlidingDrawer。
答案 1 :(得分:0)
您实际上可以创建自己的动画来实际移动ImageView,这样您就可以随时点击它。
当然这取决于你的情况,但是你想通过调整左边距来移动X轴上的图像视图,你会有类似的东西:
public class ViewLeftMarginAnimation extends Animation { int startMargin; int targetMargin; View view; public ViewGrowAnimation(View view, int start, int target) { this.view = view; this.start = height; this.targetHeight = toHeight; this.setInterpolator(new DecelerateInterpolator()); this.setDuration(1000); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { int newMargin = (int) (startMargin + ((targetMargin - startMargin) * interpolatedTime)); RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); p.leftMargin = newMargin; view.setLayoutParams(p); view.requestLayout(); } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override public boolean willChangeBounds() { return true; } }