TranslateAnimation 고려 사항

7534 단어 JavaAndroid
Android에서 프로그램 코드에서 Translate Animation을 사용할 때 고려할 사항입니다.
프로그램에서 TranslateAnimation을 사용할 때 구조기는 다음과 같은 두 개의 구조기가 있다.
  • public TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
  • public TranslateAnimation (int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
  • # 일단public Translate Animation(Context context, Attribute Set attrs) 같은 구조기도 있는데 어떤 것인지 말하자면 XML을 읽고 어떻게 했는지 생략합니다.

    하고 싶은 일


    그리고 이 Translate Animati로 다음 애니메이션을 실현하고 싶습니다.두 번째 구조기는 모두 Translate Animation이다.ABSOLUTE를 지목했으면 좋겠다고 생각했는데 잘 어울려서 적어놨어요.

    또한 도면을 수동으로 이동할 수 있으므로 현재 위치에서 특정 좌표로 이동해야 합니다.

    고려 솔루션(오류)


    위의 애니메이션을 지정할 때, 나는 먼저 이렇게 쓰면 된다고 생각한다.
    X 위치가 전혀 움직이지 않기 때문에 fromXType과 toXValue는 Translate Animation입니다.RELATIVE_TO_SELF, fromXValue 및 toXValue는 0
  • Y 위치가 현재 위치에서 아래로 이동하므로 fromYType은 TranslateAnimation입니다.ABSOLUTE에서 fromYValue는 현재 뷰 좌표
  • 입니다.
  • Y 위치가 이동하고 싶은 위치를 결정하기 때문에 ToYType은 Translate Animation이다.ABSOLUTE에서 toYValue는 이동하려는 좌표
  • 그리고 이 방침에 따라 코드를 쓰면 아마 다음과 같은 느낌이 들 거예요.
        TranslateAnimation anim = new TranslateAnimation(
                TranslateAnimation.RELATIVE_TO_SELF, 0,
                TranslateAnimation.RELATIVE_TO_SELF, 0,
                TranslateAnimation.ABSOLUTE, /* 今のビュー座標 */,
                TranslateAnimation.ABSOLUTE, /* 移動したいビュー座標 */);
    
    그러나 이렇게 되면 이동 시작 위치에 따라 애니메이션과 이동 위치와 끝점이 멀어져 제대로 움직이지 못한다.
    안드로이드의 소스 코드에 대해서도 여러 가지 조사를 했지만 결론을 내지 못했다.

    진상


    어떻게 설명해야 할지 잘 모르겠지만 fromXValue, fromYValue는 원본을 이동하는 부모 보기의 왼쪽 상단을 기준으로 하는 좌표값(현재 위치의 경우 fromXType, fromYType의 값은 0과 무관), 이동하고 싶은 위치와 현재 위치의 상대값을 지정한다.이것은 toXType과 toYType에 대해 무엇을 지정해도 바뀌지 않습니다.따라서 아래의 형식은 정확하다.
        TranslateAnimation anim = new TranslateAnimation(
                TranslateAnimation.RELATIVE_TO_SELF, 0,
                TranslateAnimation.RELATIVE_TO_SELF, 0,
                TranslateAnimation.RELATIVE_TO_SELF, 0,
                TranslateAnimation.ABSOLUTE, /* 移動したいビュー座標 - 今のビュー座標 */);
    
    (fromYValue의 좌표는 "지금 뷰 좌표에서 아래로 이동하고 싶다"는 것이기 때문에 이렇게 되지만 위로 이동할 때는 반대입니다.)이렇게 하면 목적지별로 잘 움직일 수 있을 거예요.
    TranslareAnimation.ABSOLUTE라는 이름을 보면 왼쪽 상단에서 시작하는 절대치로 여겨져 왔지만, 그렇지 않았다.

    진상


    또한 안드로이드의 소스 코드를 살펴보면 "~Type"4개 매개변수가 다음과 같습니다.
    Animation.java
    protected float resolveSize(int type, float value, int size, int parentSize) {
        switch (type) {
            case ABSOLUTE:
                return value;
            case RELATIVE_TO_SELF:
                return size * value;
            case RELATIVE_TO_PARENT:
                return parentSize * value;
            default:
                return value;
        }
    }
    
    #TranslateAnimation 클래스 자체가 이 값을 처리하지 않고 Animation 클래스의 방법으로 처리합니다.여기도 좀 놀랐네.
    한마디로'~Value'에서 0을 지정할 때의 행동은 무엇을 하든지 똑같다(0에 무엇을 곱하면 0이기 때문이다).애니메이션의 어딘가.ABSOLUTE를 지정해야 하는 것 외에 프로그램 코드에서 클래스를 사용해야 할 것 같습니다.

    이번에 배운 거.

  • 애니메이션의 시작점 값에 시작 값을 사용할 경우 먼저 0
  • 을 지정합니다.
  • 애니메이션 끝점의 값은 항상 현재 값과 상대적이다
  • 그럼 애니메이션은 억지로 XML을 사용하지 마세요.어떻게든 사용해야 할 때 특성을 잘 이해해 주세요.

    겸사겸사 말씀드리겠습니다.


    첫 번째 구조기는'~Delta'라고 쓰여 있는데 언뜻 보면 어떤 비율을 지정한 것 같지만 원본 코드를 보니 두 번째 구조기의'~~Type'의 값TranslateAnimation.ABSOLUTE을 설정한 것일 뿐이다.
    TranslateAnimation.java
    public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {
            mFromXValue = fromXDelta;
            mToXValue = toXDelta;
            mFromYValue = fromYDelta;
            mToYValue = toYDelta;
    
            mFromXType = ABSOLUTE;
            mToXType = ABSOLUTE;
            mFromYType = ABSOLUTE;
            mToYType = ABSOLUTE;
        }
    
    지금 가격에서 어디로 이동하려면 이쪽도 가능해요.

    좋은 웹페이지 즐겨찾기