2011-08-19 5 views
1

그래서 나는 imageview를 가지고 있는데, 그 위치에 사용자가 닿는 위치를 애니메이션으로 적용 해 적용했습니다 ... 그 작업을 잘 ... bt 내가 활동에 시간 업데이터를 추가하면 분명히 스레드에서 실행 중입니다 ... 번역 애니메이션이 비정상적으로 행동하기 시작합니다. 즉 범위를 벗어났습니다 ... 다른 방법을 시도했습니다 ... 아무것도 작동하지 않았습니다 ... 시간 소멸자를 제거하고 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; 
} 

이 좀 봐 ... 디지털 시계합니다 alse 시간을 업데이트 스레드를 사용하는 작동하지 않습니다 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 사람을 좀 도와 ... 난 그냥 사전에

답변

0

당신은 매우 수행하는 thnx .... 그 일이 일어나고 이유를 이해 해달라고 값 비싼 작업은 onTouch입니다. 애니메이션은 사용자의 손가락과 함께보기를 움직일 필요가 없습니다. 당신이해야 할 일은 onTouch에서보기 위치를 새로 고치고 (새로 설정 LayoutParams) 무효화하는 것입니다.

+0

귀하의 요지를 얻었지만 부드러운 움직임을 보여 주어야합니다 .dats 왜 애니메이션을 사용합니까 ... 괜찮습니까? xclude ... den thread 문제가 해결 될 예정입니까? – user632905

+0

그럴 생각이 없습니다. 나는 애니메이션이 그런 경우 움직임을 부드럽게하는데 도움이되지 않는다고 생각한다. 애니메이션을 제거하면 뷰를 드래그하는 동안 전반적인 성능이 향상됩니다. – Ronnie

+0

k는 시도 할 것입니다 ... thnx 4 dat advice .. 비록 – user632905

관련 문제