Android translateanimation框架

Android translateanimation框架,android,animation,Android,Animation,我对这个指令翻译有问题, 在实践中,当启动动画向后移动帧(从rigth到left动画)时,在右侧剪切帧,释放触摸屏时仅剪切屏幕外的部分。。。 相反,当我运行帧的动画时(从左侧到右侧)。。例如: 将手指拖到屏幕中间,最后松开。。动画开始,帧消失。。故障: 如果我在屏幕上从屏幕中间到末端随机按一个点,动画将从我按下的点开始 我的代码: RelativeLayout.LayoutParams params = null; int x; int

我对这个指令翻译有问题, 在实践中,当启动动画向后移动帧(从rigth到left动画)时,在右侧剪切帧,释放触摸屏时仅剪切屏幕外的部分。。。 相反,当我运行帧的动画时(从左侧到右侧)。。例如:

将手指拖到屏幕中间,最后松开。。动画开始,帧消失。。故障: 如果我在屏幕上从屏幕中间到末端随机按一个点,动画将从我按下的点开始

我的代码:

            RelativeLayout.LayoutParams params = null;
         int x;
         int offset;
       int tmp= 0;
        int avviato = 0;
    @Override
    public boolean onTouch(View v, android.view.MotionEvent event) {
            // TODO Auto-generated method stub
            FrameLayout frame = (FrameLayout) this.findViewById(R.id.frame1);
            if(v == findViewById(R.id.frame1)){
            if(event.getAction() == android.view.MotionEvent.ACTION_MOVE){
                    x= (int) event.getRawX();
    if (tmp==0){
            offset = x;
            tmp = 1;
    }

    if(offset < (x - WHIDTH /5) || offset > (x + WHIDTH /5) || avviato ==1)
    {
            params = new RelativeLayout.LayoutParams((int) (WHIDTH ), (int) (HEIGHT));
            params.leftMargin = x;
            params.topMargin = (int) (0);
            frame.setLayoutParams(params);
            avviato = 1;
    }

                    }//fine get action
            if(event.getAction() == android.view.MotionEvent.ACTION_UP){
                    tmp = 0;
                    avviato = 0;

                    x= (int) event.getRawX();
                    if(x > (WHIDTH /3))
                    {

                    Animation  animation= new TranslateAnimation(x - x, WHIDTH , 0, 0);
                    animation.setDuration(1000);
                    animation.setFillAfter(true);
                    frame.startAnimation(animation);


                    }
                    if(x < (larghezza /3))
                    {
                            Log.i("xxXxxanommmm", toString().valueOf(x));
                            Animation animation= new TranslateAnimation(x-x,0 -x, 0, 0);
                            animation.setDuration(1000);
                            animation.setFillAfter(true);
                            frame.startAnimation(animation);

                    }
            }
            return true;
            }//fine if v

            return false;
    }//fine touch
RelativeLayout.LayoutParams params=null;
int x;
整数偏移量;
int-tmp=0;
int-avviato=0;
@凌驾
公共布尔onTouch(视图v,android.View.MotionEvent事件){
//TODO自动生成的方法存根
FrameLayout frame=(FrameLayout)this.findviewbyd(R.id.frame1);
if(v==findviewbyd(R.id.frame1)){
if(event.getAction()==android.view.MotionEvent.ACTION\u MOVE){
x=(int)event.getRawX();
如果(tmp==0){
偏移量=x;
tmp=1;
}
如果(偏移量<(x-WHIDTH/5)| |偏移量>(x+WHIDTH/5)| | avviato==1)
{
params=新的相对布局params((int)(WHIDTH),(int)(HEIGHT));
params.leftMargin=x;
参数topMargin=(int)(0);
frame.setLayoutParams(参数);
avviato=1;
}
}//好的,开始行动
if(event.getAction()==android.view.MotionEvent.ACTION\u UP){
tmp=0;
avviato=0;
x=(int)event.getRawX();
如果(x>(WHIDTH/3))
{
动画=新的平移动画(x-x,WHIDTH,0,0);
动画。设置持续时间(1000);
animation.setFillAfter(true);
帧。开始动画(动画);
}
如果(x<(拉格萨/3))
{
Log.i(“xxXxxanommmm”,toString().valueOf(x));
动画=新的平移动画(x-x,0-x,0,0);
动画。设置持续时间(1000);
animation.setFillAfter(true);
帧。开始动画(动画);
}
}
返回true;
}//如果v
返回false;
}//细腻

如果我理解正确,您的手指在触摸屏上滑动时会跟踪屏幕,但当您从屏幕上抬起手指时,布局会“弹”回左侧。是这样吗?对我来说,这听起来像是标准的Android行为。我只是猜测,但是你能检查一下你的代码是否被调用了吗?不完全是。。当动画结束时,如果我再次触摸屏幕,动画将重新启动。。我会。。如果动画已结束,请将焦点更改为主布局。。但是我尝试在声明函数traslateanimation之后放一个if(animation.hasend()==true),动画在没有任何traslate的情况下停止。至少我认为动画是异步的,这意味着您无法在代码仍在运行时真正检查动画是否已结束。要检查这一点,可以使用Listener
Animation.AnimationListener
onAnimationEnd()
方法。。谢谢你的帮助。。但不是工作D:,我把监听器放在活动上,我在动画上添加了设置监听器,当动画完成时,我尝试frame.setClickable(false);但是我不能按框架下的键好的我解决了一个问题。。在动画后调整帧大小。。非常感谢你的帮助,再次感谢。