我创建了一个按钮,我想在按下时将其翻译下来。我在anim文件夹中创建了一个xml文件来设置向下翻译。
翻译有效但按钮会在动画结束时恢复到原始位置。为了解决这个问题,我使用了代码:
$this->call()
虽然完成翻译动画后按钮仍然保持在其位置,但是当它再次按下时它停止工作并且不会从该位置向下翻转。
每次按下按钮时如何使按钮平移?
编辑:
根据要求,以下是翻译代码,存储在translationDown.setFillAfter(true);
translationDown.setFillEnabled(true);
:
translate_down.xml
这是我的java文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="300"
android:duration="250"
/>
</set>
答案 0 :(得分:1)
这是因为动画使用视图的表示(位图副本)(即按钮)。当动画正在进行时,位图复制和而非您的视图正在翻译。动画完成后,您的实际视图尚未移动。
使用translationDown.setFillAfter(true)和translationDown.setFillEnabled(true)将无济于事,因为这些是用于动画链接的,即如果你想用另一个动画对象继续动画。
您需要做的是在动画后设置视图的位置属性。以下是如何实现这一目标的示例:
final Animation slideDown = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate_down);
relativeLayoutButtons.startAnimation(slideDown);
relativeLayoutButtons.getAnimation().setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
// Set the position properties of your view here.
// e.g.
relativeLayoutButtons.setTranslationX(50);
relativeLayoutButtons.setTranslationY(50);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
答案 1 :(得分:0)
好吧,我打赌你可以使用ontouch()
代替onClick()
。一旦你改变Button
位置,我认为它只能在原始位置上点击。
尝试以下内容。
Button bt = (Button) findViewById(R.id.button);
bt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event){
switch(event.getAction())
{
case MotionEvent.ACTION_UP :
{
// Do whatever you want here.
}
return true;
}});
答案 2 :(得分:0)
旧动画API只是移动视图的绘图,但不移动实际视图位置。 因此,按下翻译的视图没有响应(实际上视图仍处于原始位置。)
使用新的Animator API。此API移动实际视图位置。
view.animate().translationY(300).setDuration(250).start();
请参阅this google's blog post了解相关信息。