我写了一个简单的动画:<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate android:fromXDelta="0" android:toXDelta="-320"
android:fromYDelta="0" android:toYDelta="0"
android:duration="5000"/>
</set>在antivity里的button使用了这个动画后,由于android:fillAfter="true",故动画结束时button停在了动画最后一祯的位置,但是发现button的onClick还是在动画第一祯的位置,也就是最初的位置可以触发onClick。
而我原来的解决办法是,将android:fillAfter="false",然后在动画结束时button.layout(l,t,r,b)来设置位置,但是这样View会闪一下,效果很不好,大家有什么好的方法吗?谢谢!
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate android:fromXDelta="0" android:toXDelta="-320"
android:fromYDelta="0" android:toYDelta="0"
android:duration="5000"/>
</set>在antivity里的button使用了这个动画后,由于android:fillAfter="true",故动画结束时button停在了动画最后一祯的位置,但是发现button的onClick还是在动画第一祯的位置,也就是最初的位置可以触发onClick。
而我原来的解决办法是,将android:fillAfter="false",然后在动画结束时button.layout(l,t,r,b)来设置位置,但是这样View会闪一下,效果很不好,大家有什么好的方法吗?谢谢!
解决方案 »
- Dialog的setOnKeyListener响应两次问题
- 怎么得到当前进程的package名字?
- 类似于某些google的东西
- andriod sdk安装
- 新手提问关于打包图片资源的问题!
- android是什么操作系统
- 下载并解析xml失败,出现空指针
- 在运行书本上的例程时出现了错误
- Android8.0系统的手机上drawBitmap会变得非常卡
- 无法加载项目: com.intellij.ide.plugins.PluginManager$StartupAbortedException: Fatal er
- Android 使用ThumbnailUtils获取网络视频缩略图的问题
- android 里怎么实现一个图层,比如说我现在有个Activity,要在上面加一个标记
Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
animationOpen.setDuration(500);
这个layout是怎么用的?
Android中animation对于目标view的位置实际上是没有变化的,即android:fillAfter="true"时,动画结束后view停在动画最后一祯的位置,但实际touch响应位置还是在动画开始之前的位置。
然后说一下解决的方法:
方法之前是在view动画开始之前事先通过layout移动目标位置(设置visible=gone用户就看不到这个位置变化),然后再启动动画,而动画中view的初始位置是layout移动前的位置,结束位置是view当前位置,即:TranslateAnimation animationOpen = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
animationOpen.setDuration(500);
那么你可以new TranslateAnimation(0, 300, 0, 0);来获得位移动画,但是移动后,它会闪回0位置,因为控件实际坐标还是0 (你可以用getX()来测试一下),而如果你用setFillAfter(true)来填充位置,它看起来停留在300了,可是你getX(),它还是0,这种情况就好像控件被拉伸了,但是实际坐标没有变,最要命的是,点击热区不会随控件移动(让人无法接受...)然后这里提出了先移位,再做位置变换,你先visibility-gone,移动好控件位置,再visibility-visible,然后这时候你控件的位置已经在300了,如果这时候你用new TranslateAnimation(0, 300, 0, 0),就会从300移动到600再弹回来,于是做个反向offset,new TranslateAnimation(-300, 0, 0, 0),那么就从0,运动到300,而且不回弹了
那么你可以new TranslateAnimation(0, 300, 0, 0);来获得位移动画,但是移动后,它会闪回0位置,因为控件实际坐标还是0 (你可以用getX()来测试一下),而如果你用setFillAfter(true)来填充位置,它看起来停留在300了,可是你getX(),它还是0,这种情况就好像控件被拉伸了,但是实际坐标没有变,最要命的是,点击热区不会随控件移动(让人无法接受...)然后这里提出了先移位,再做位置变换,你先visibility-gone,移动好控件位置,再visibility-visible,然后这时候你控件的位置已经在300了,如果这时候你用new TranslateAnimation(0, 300, 0, 0),就会从300移动到600再弹回来,于是做个反向offset,new TranslateAnimation(-300, 0, 0, 0),那么就从0,运动到300,而且不回弹了
还是这个回复让我看明白了,谢谢