마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 애니메이션 이동 질문입니다.

0 추천

현재는 업을 누르면 저 빨간 포인트가 39까지 쭉 올라갑니다 

다운을 누르면 다시 1로 내려가고요

업을 누르면 한칸씩 올라가고 또 업을 누르면  한칸씩 올라가고 다운을 누르면 한칸씩 내려가는걸 해보고싶습니다.

전혀 감이 잡히지않아 이렇게 글을 올려봅니다.

package org.myjob;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;


public class MyJob extends AppCompatActivity {

    private ImageView image;
    private Button button1, button2;
    private Animation up, down;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        image = (ImageView) findViewById(R.id.image);

        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setAnimation(up);
            }
        });
        button2 = (Button) findViewById(R.id.button2);

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setAnimation(down);
            }
        });


        /* anim 폴더 안에 정의되어 있는 애니메이션 액션 정보를 로딩합니다. */
        up = AnimationUtils.loadAnimation(this, R.anim.up);
        down = AnimationUtils.loadAnimation(this, R.anim.down);

    }


    private void setAnimation(Animation animation) {

        animation.setFillAfter(true); //anmation 후에도 그대로 있도록 한다.

        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationEnd(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationStart(Animation animation) {
            }
        });

        image.startAnimation(animation);

    }

}

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--up.xml-->
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromYDelta="-10"
        android:toYDelta="-95%p"
        android:duration="1000"  />

</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <!--down.xml-->
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromYDelta="-90%p"
        android:toYDelta="0"
        android:duration="1000"  />
</set>

 

구리시인 (250 포인트) 님이 2018년 3월 22일 질문
구리시인님이 2018년 3월 22일 수정

1개의 답변

0 추천
 
채택된 답변
objectanimator를 키워드로 검색하셔서 작업해보세요
설춘식 (5,250 포인트) 님이 2018년 3월 23일 답변
구리시인님이 2018년 3월 23일 채택됨
답변감사드립니다.
한번 찾아서 직접해보겠습니다^^
알려주신대로 해보았습니다.
근데 문제는 다시 업을 누르면 처음부터 시작을 하는데 그 자리에서 다시 올라게할수있는 방법은 없나요?
음 그러면 ValueAnimator이용해서 처리해보시는걸 추천합니다
ofInt로 시작값과 끝 의 값을 인자로 넣어서 처리하는 건데
animationListener를 통해 빨간 점 위치를 움직이는걸 추천합니다
바쁘신대도 이렇게 계속 답변을 달아주셔서 정말 감사합니다
안되시면 또 물어보세욥
구글에 내용이 많이없어서 생각보다 많이 힘드네요..ㅜㅜ
아래 샘플 추가해 드렸으니 적용하면서 원하는 결과물을 만드는데 크게 무리는 없을거같습니다
시작값과 끝값을 원하는 값으로 변형하면서 작업해보세요
    public void moveAnimation(final View view){
        ValueAnimator animator = new ValueAnimator();
        animator.ofFloat(0,10);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float a = (float) animation.getAnimatedValue();
                view.setY(a);
            }
        });
        animator.setDuration(1000);
        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
            }

            @Override
            public void onAnimationStart(Animator animation) {
                super.onAnimationStart(animation);
            }
        });
        animator.start();
    }
네 주신 예제로 연구하고 공부하여 적용시켜보겠습니다. 다시 한번 더 감사드립니다
public class MyJob extends AppCompatActivity {

    private ImageView image;
    private Button button1, button2;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        image = (ImageView) findViewById(R.id.image);
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {

                ValueAnimator animator = new ValueAnimator();
                animator.ofFloat(-10, -95);
                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        float a = (float) animation.getAnimatedValue();
                        view.setY(a);
                    }
                });
                animator.setDuration(1000);
                animator.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        super.onAnimationEnd(animation);
                    }

                    @Override
                    public void onAnimationStart(Animator animation) {
                        super.onAnimationStart(animation);
                    }
                });
                animator.start();
            }
        });
    }
}

이런식으로 적용을 시켰는데 업을 누르면 앱이 중지되는데 잘못된건가요..
혹시 버튼 누르면 imageview가 움직여야 하는건가요?
그리고 로그엔 어떤 내용이 뜨나요? 오류내용을 보고 파악하는 것도 같이 배우면서 하셔야하니 내용도 같이 올려주시면 설명드리면서 수정 도와드리겠습니다
그리고 샘플은 메서드로 만들어준 이유가 있습니다
만들어보려고 하는것이 실내지도를 구현해보려합니다.
바탕의 건물 이미지뷰와 주황 포인터 이미지뷰를 이용해서 실내의 좌표값을 받아서 사람이 움직이면 주황 포인터이미지뷰를 같이 이동시키게 하려합니다.
처음부터 하나하나씩 해보려합니다.
그래서 일단은 버튼을 이용해서 업버튼을 누르면 1-2로 또 누르면 2-3으로 부터 해보려하는데 잘안되서 이렇게 다시 질문을 올립니다.
FATAL EXCEPTION: main
                                                           Process: org.myjob, PID: 11212
                                                           java.lang.NullPointerException: Attempt to get length of null array

이런로그의 에러가 나옵니다.
넵 그건 알겠는데 움직이려 하는게 코드상에서 imageview 인가요?
네 그렇습니다.
레이아웃에 id도 설정은 해놨습니다.
여기다 댓글로하면 제가 실시간으로 봐드리기가 어려운데 혹시 google 행아웃쓰시나요?
써본적은 없지만 배우기위해서라면 써보겠습니다
gmail email주소 알려주시면 추가해서 질문있으실때 알려드릴께요
ghkstjr18 입니다!
...