使用线程时的动画问题

时间:2011-08-19 11:59:04

标签: android android-widget

所以我有一个imageview,我已经应用了翻译动画,其位置是用户触摸的点......工作正常......当我向活动添加时间更新器时,显然正在运行一个线程...翻译动画开始表现异常,即它只是走出界限....我尝试了不同的方法..没有工作..我消除了时间udater和使用dgital时钟小部件..但它再次没有'作为数字时钟工作,使用线程来更新时间......

看一下翻译动画代码

 public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub 

    if(event.getAction() == MotionEvent.ACTION_MOVE)
    {
        float f1 = event.getX();
        swidth=image.getWidth();
        ((MaskedTextView) findViewById(R.id.text)).setVisibility(View.INVISIBLE);
        android.widget.RelativeLayout.LayoutParams localLayoutParams = (android.widget.RelativeLayout.LayoutParams)image.getLayoutParams();
        barwidth=bar.getWidth();
        bwidth=barwidth-swidth;
        android.widget.RelativeLayout.LayoutParams localLayoutParams2 = localLayoutParams;
        localLayoutParams2.leftMargin=(int) event.getX();
        if (localLayoutParams.leftMargin<bwidth && f1<bwidth)
        {
        TranslateAnimation anim = new TranslateAnimation(localLayoutParams.leftMargin,f1, 0, 0);
         anim.setStartOffset(0L);
            anim.setDuration(500L);         
            anim.setFillBefore(true);
            image.startAnimation(anim);
            image.invalidate();
        }
    }

    if (event.getAction() == MotionEvent.ACTION_UP)
    {
        float f1=event.getX();
        android.widget.RelativeLayout.LayoutParams localLayoutParams = (android.widget.RelativeLayout.LayoutParams)image.getLayoutParams();


        if(f1<bwidth)
        {   
        TranslateAnimation anim=new TranslateAnimation(f1,0,0,0);   
        anim.setStartOffset(0L);
        anim.setDuration(500L);
        anim.setFillBefore(true);
        image.startAnimation(anim);
        image.invalidate();
        }
        else
        {
            if(soundsEnabled && !silent)
            mpDot.start();
            SwipeImage.this.finish();
        }


    }
    return true;
}

这是每60秒更新一次的简单代码..

 new Timer().schedule(new MyTimerTask(), 0, 60000);

 public class MyTimerTask extends TimerTask {
    private Runnable runnable = new Runnable() {
        public void run() {
            Calendar c = Calendar.getInstance();
            int hr;

            if(DateFormat.is24HourFormat(getApplicationContext()))
                 hr=c.get(Calendar.HOUR_OF_DAY);
            else
                 hr=c.get(Calendar.HOUR);

            int minute = c.get(Calendar.MINUTE);
            if(minute<10)
                timeTextView.setText(String.valueOf(hr)+":0"+String.valueOf(minute));
            else
            timeTextView.setText(String.valueOf(hr)+":"+String.valueOf(minute));


        }
    };

    public void run() {

        handler.post(runnable);
        //invalidate();
    }
}*/

PLZ帮助我们......我只是不明白为什么会发生...... thnx提前

1 个答案:

答案 0 :(得分:0)

您在onTouch执行了非常昂贵的操作。移动视图和用户手指不需要动画。您需要做的是在onTouch中更新视图位置(设置新LayoutParams)并使其无效。