2012-04-04 2 views
2

ImageView 이동 애니메이션을 번역하고 있습니다. 나는이 코드를 사용하고 있습니다 : 나는 애니메이션 및 이력서를 일시 중지 할 수 없습니다애니메이션 일시 중지 및 다시 시작

image = (ImageView)findViewById(R.id.img); 
     image.startAnimation(animSet); 

모든 것이 잘 작동하지만, : 애니메이션의 세트를 생성 한 후

TranslateAnimation set1 = new TranslateAnimation(-4, 10, -110, 0); 
     set1.setDuration(3000); 
     TranslateAnimation set2 = new TranslateAnimation(10, -3, 0, 115); 
     set2.setDuration(3000); 
     set2.setStartOffset(2200); 
     TranslateAnimation set3 = new TranslateAnimation(-3, -20, 0, -100); 
     set3.setDuration(3000); 
     set3.setStartOffset(4500); 
     TranslateAnimation set4 = new TranslateAnimation(0, 13, 0, -120); 
     set4.setDuration(3000); 
     set4.setStartOffset(6500); 

     animSet.addAnimation(set1); 
     animSet.addAnimation(set2); 
     animSet.addAnimation(set3); 
     animSet.addAnimation(set4); 

     animSet.setFillAfter(true); 

을, 나는 이런 ImageView에 적용 버튼을 클릭하면이됩니다.

어떻게하면됩니까?

나는 모든 것을 시도했지만 성공하지 못했습니다. 어떤 생각을 어떻게 할 것인가?

도와주세요!

답변

7

시간을 검색 한 후이 link을 확인한 후이 기능이 애니메이션 번역을 위해 작동하는지 확인한 다음 약간의 수정을 거친 후 애니메이션에도 적용됩니다. 참조 아래 코드를 수정

:

public class TranslateAnim extends TranslateAnimation{ 

    public TranslateAnim(float fromXDelta, float toXDelta, float fromYDelta, 
      float toYDelta) { 
     super(fromXDelta, toXDelta, fromYDelta, toYDelta); 
     // TODO Auto-generated constructor stub 
    } 

    private long mElapsedAtPause=0; 
    private boolean mPaused=false; 

    @Override 
    public boolean getTransformation(long currentTime, Transformation outTransformation) { 
     if(mPaused && mElapsedAtPause==0) { 
      mElapsedAtPause=currentTime-getStartTime(); 
     } 
     if(mPaused) 
      setStartTime(currentTime-mElapsedAtPause); 
     return super.getTransformation(currentTime, outTransformation); 
    } 

    public void pause() { 
     mElapsedAtPause=0; 
     mPaused=true; 
    } 

    public void resume() { 
     mPaused=false; 
    } 
} 

난 단지 클래스 이름을 변경할 수 있습니다, 클래스 이름이 클래스의 생성자를 확장합니다. 애니메이션을 시작 후에는 일시 정지를 호출 방법을 재개 한

TranslateAnim set1, set2, set3, set4; // objects of TranslateAnim Class 

set1 = new TranslateAnim(-4, 10, -110, 0); // initialize all objects like this way 

animSet.addAnimation(set1); // add all animation objests in your animation set as you do before 

animSet.setFillAfter(true); 

과 :

당신은 그것을 좋아 사용할 수 있습니다. 요한에게 코드를 알려 주셔서 감사합니다.

호프가이 문제를 해결하기 바랍니다. :)

+0

XML에서 애니메이션을로드 할 수 있습니까? – Deepak

+1

오, 제 질문에 게시 했습니까? 너무 어리 석다. : P – Deepak

+0

일시 중지시 사용 후보기 위치를 설정할 수 있습니까? 중간에 일시 중지 방법을 사용한다고 가정하고 일시 중지 된 위치에 새 애니메이션을 적용하려고합니다. 가능한가? –

-1

또한 다음과 같이 수행 할 수 있습니다 а можно еще так :

public class MyTranslateAnimation extends TranslateAnimation { 

    private long mTimePause, mTimeTotal; 
    private boolean mPause; 


    public MyTranslateAnimation(Context context, AttributeSet attrs) { 

     super(context, attrs); 

    } 

    @Override 
    public boolean getTransformation(long currentTime, Transformation outTransformation) { 
     updateTime(currentTime); 
     return super.getTransformation(mTimeTotal - mTimePause, outTransformation); 
    } 

    private void updateTime(long currentTime) { 
     long dt = currentTime - mTimeTotal; 
     mTimeTotal += dt; 
     if (mPause) { 
      mTimePause += dt; 
     } 
    } 

    public void pause() { 
     mPause = true; 
    } 

    public void resume() { 
     mPause = false; 
    } 

} 

는이 같은 자신의 AnimationUtils 서브 클래스를 만들 수있는 XML에서 애니메이션을 만들려면 다음 для создания анимации из XML можно сделать свой AnimationUtils :

public class MyAnimationUtils { 

    public static Animation loadAnimation(Context context, int id) throws Resources.NotFoundException { 

     XmlResourceParser parser = null; 
     try { 
      parser = context.getResources().getAnimation(id); 
      return createAnimationFromXml(context, parser); 
     } catch (XmlPullParserException ex) { 
      Resources.NotFoundException rnf = new Resources.NotFoundException("Can't load animation resource ID #0x" + Integer.toHexString(id)); 
      rnf.initCause(ex); 
      throw rnf; 
     } catch (IOException ex) { 
      Resources.NotFoundException rnf = new Resources.NotFoundException("Can't load animation resource ID #0x" + Integer.toHexString(id)); 
      rnf.initCause(ex); 
      throw rnf; 
     } finally { 
      if (parser != null) parser.close(); 
     } 

    } 

    private static Animation createAnimationFromXml(Context c, XmlPullParser parser) throws XmlPullParserException, IOException { 

     return createAnimationFromXml(c, parser, null, Xml.asAttributeSet(parser)); 

    } 

    private static Animation createAnimationFromXml(Context c, XmlPullParser parser, AnimationSet parent, AttributeSet attrs) throws XmlPullParserException, IOException { 

     Animation anim = null; 

     // Make sure we are on a start tag. 
     int type; 
     int depth = parser.getDepth(); 

     while (((type=parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth) 
       && type != XmlPullParser.END_DOCUMENT) { 

      if (type != XmlPullParser.START_TAG) { 
       continue; 
      } 

      String name = parser.getName(); 

      if (name.equals("set")) { 
       anim = new AnimationSet(c, attrs); 
       createAnimationFromXml(c, parser, (AnimationSet)anim, attrs); 
      } else if (name.equals("alpha")) { 
       anim = new AlphaAnimation(c, attrs); 
      } else if (name.equals("scale")) { 
       anim = new ScaleAnimation(c, attrs); 
      } else if (name.equals("rotate")) { 
       anim = new RotateAnimation(c, attrs); 
      } else if (name.equals("translate")) { 
       //anim = new TranslateAnimation(c, attrs); 
       anim = new MyTranslateAnimation(c, attrs); // отредактировали только эту строчку, остальное взяли как было 
      } else { 
       throw new RuntimeException("Unknown animation name: " + parser.getName()); 
      } 

      if (parent != null) { 
       parent.addAnimation(anim); 
      } 
     } 

     return anim; 

    } 

} 

그리고 당신은이 같은 애니메이션을 만들 : и를 вот так создаем анимацию :이 도움이

MyTranslateAnimation cloud1 = (MyTranslateAnimation) MyAnimationUtils.loadAnimation(this, R.anim.main_cloud1); 

희망. Пользутесь на здоровье!

관련 문제