2013-02-14 3 views
1

나는 이미지에 간단한 애니메이션을 만들었고 축하하기 위해 이미지에 OnClick 이벤트를 설정했습니다. 문제는 onCreate에서 이미지를 애니메이션으로 만들기 시작하고 이미지를 클릭하여 설정하고 토스트를 실행했지만 문제는 이미지를 클릭 할 수 없다는 것입니다.하지만 원래 위치에서 이미지는 토스트는 당신의 도움이android에서 클릭 가능한 애니메이션을 만드는 방법

에 대한

들으 (이미지가 애니메이션으로 이동되지 않음) 시작되는이 애니메이션 ANIM 폴더에있는 코드 (translate.xml)

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 
    <translate 
     android:fromXDelta="-80%p" 
     android:toXDelta="80%p" 
     android:duration="20000" 
     android:repeatCount="100" 
     android:repeatMode="restart" 



     /> 


</set> 

이있다 액티비티 클래스

package com.example.animatest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

private ImageView image01; 

private long aefe; 
private ImageView image1; 
private ImageView image2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    image01 = (ImageView) findViewById(R.id.imageView1); 

    final Animation animTranslate1 = AnimationUtils.loadAnimation(this, 
      R.anim.translate); 

    image01.startAnimation(animTranslate1); 

    image01.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT) 
        .show(); 

     } 
    }); 

} 

} 
+0

이 말의 의미는 다음과 같습니다. '하지만 이미지의 원래 위치를 누르면 토스트가 시작됩니다 (이미지가 애니메이션과 함께 움직이지 않습니다). 일부 스크린 샷을 추가 할 수 있습니까? 이해하기 어렵다. –

+0

나는 토스트가 시작될 이미지를 클릭하면 애니메이션을 수행 할 때 이미지를 클릭하면 아무 일도 일어나지 않는다는 것을 의미합니다. –

+0

내가 원하는 화면에서 왼쪽에서부터 애니메이션을 수행하는 이미지가 더 분명합니다. 사용자가 애니메이션을 할 때 이미지를 클릭하면 토스트가 시작됩니다 –

답변

2

전체 애니메이션 동안 뷰는 이전 위치 (애니메이션이 방금 시작된 위치)에 남아 있습니다. 그냥 다른 지점에 그려져 있습니다. 애니메이션이 끝나면 애니메이션보기를 이동해야합니다.

애니메이션에 리스너를 등록하십시오. http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html

onAnimationEnd 구현에서 애니메이션의 최종 상태/레이아웃과 비슷하게 활동 레이아웃을 수정하십시오. 귀하의 코멘트 후

업데이트 :

내가이 일을 볼 수있는 유일한 방법은 자바 코드에서 사용자 지정 애니메이션을 생성하고 사용자 정의 애니메이션의 구현입니다 '보호 무효 applyTransformation을 (interpolatedTime, 변환 t 플로트)' 방법. 예를 들어, 우리의 응용 프로그램에서 우리는 실제로 으로 이동하는 동영상을 보았습니다. 인 경우이 아닌 다른 위치에서 움직였습니다. 예 : 아래의 증가 또는 뷰의 실제 높이를 감소 애니메이션의 예이다 :

public class ViewHeightAnimation extends Animation { 
    private final View view; 
    private final float diffHeight; 
    private final int startHeight; 

    public ViewHeightAnimation(View view, float diffHeight, int startHeight) { 
     this.view = view; 
     this.diffHeight = diffHeight; 
     this.startHeight = startHeight; 

     setDuration(200); 
     setInterpolator(new AccelerateDecelerateInterpolator()); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     android.view.ViewGroup.MarginLayoutParams layoutParams = (android.view.ViewGroup.MarginLayoutParams)view.getLayoutParams(); 
     layoutParams.height = Math.round(startHeight + (diffHeight * interpolatedTime)); 
     view.setLayoutParams(layoutParams); 
    } 

    @Override 
    public boolean willChangeBounds() { 
     return true; 
    } 
} 

애니메이션이 상이한 것,하지만도에 'getLayoutParams()'및 'setLayoutParams를() 사용하는 것 보기 (ImageView) 위치를 수정하고 layoutParams.topMargin 및 layoutParams.leftMargin을 적절하게 변경하십시오.

Android 2.x 이하가 아닌 경우 ObjectAnimator (3.0 이상) 또는 ViewPropertyAnimator (3.1 이상)를 사용하는 것이 더 나은 해결책입니다. 이전에 다른 답변에서 언급했듯이.

이 정보가 도움이되는지 알려주세요.

+0

thx하지만 이것은 내가 onAnimationEnd를 원하지 않는다는 것을 의미하지 않는다. waht 애니메이션을 시작할 때 애니메이션을 클릭 할 수 있습니다. –

+0

위의 답변을 업데이트했습니다. 도움이 되었습니까? –

+0

감사하지만 어디서이 코드 (클래스)를 가져야합니까? 미안하지만 어쨌든 그다지 생각하지 않습니다. 이 어쨌든 감사합니다 –

0

는 다음과 같이 시도 : 그 다음 작동하지 않는 경우

final Animation animTranslate1 = AnimationUtils.loadAnimation(this,R.anim.translate); 
animTranslate1.setFillAfter(true); 
image01.startAnimation(animTranslate1); 

당신이 (이전 중복 된 질문에 대한 답변에서 지적 된) 새로운 속성 애니메이션 프레임 워크

See here to learn about it을 사용해야합니다

0

imageView를 움직이는 방법은 모양이 바뀌기 때문에 실제로 imageView는 이전 위치에 있습니다. 이 유형의 애니메이션으로는 원하는 것을 쉽게 할 수있는 방법이 없습니다. ObjectAnimators을 사용하는 것이 좋습니다.

관련 문제