2016-07-13 4 views
0

5 가지 배경 이미지 뷰가 있습니다. 나는 image2를 퇴색시키고 image5를 페이드 효과가있는 배경으로 설정하려고합니다. 이것은 무작위로 계속 변화해야합니다. 문제는 어떻게 효율적으로이 작업을 수행 할 수 있는가입니다.imageView를 임의로 배경을 변경하는 방법은 무엇입니까?

이 난 페이드주고 animations-

페이드 아웃

Animation out = AnimationUtils.makeOutAnimation(this, true); 
     viewToAnimate.startAnimation(out); 
     viewToAnimate.setVisibility(View.INVISIBLE); 

변색이 난 변경하는 방법이다

Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 
     viewToAnimate.startAnimation(in); 
     viewToAnimate.setVisibility(View.VISIBLE); 

의 시스템을 사용하여 효과를 페이드 아웃 어떻게 내 배경 -

search_engine_identifier.setImageResource(R.drawable.ic_yahoo); 

답변

0

Android의 프레임 애니메이션을 사용하면 ImageView의 배경을 변경할 수 있습니다. 이 API 그것은 모든 곳에서 작동 1에 소개 된대로

애니메이션-목록

애니메이션 목록은 선택의 기본 프레임 애니메이션이며, 그것은 간단합니다. 주어진 지속 기간 동안 주어진 순서로 제공되는 일련의 이미지를 순환합니다. 그것은 시간이다

<?xml version="1.0" encoding="utf-8"?> 

    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
        android:oneshot="true"> 

     <item 
      android:duration="500" 
      android:drawable="@drawable/ic_heart_0"/> 

     <item 
      android:duration="500" 
      android:drawable="@drawable/ic_heart_25"/> 

     <item 
      android:duration="500" 
      android:drawable="@drawable/ic_heart_50"/> 

     <item 
      android:duration="500" 
      android:drawable="@drawable/ic_heart_75"/> 

     <item 
      android:duration="500" 
      android:drawable="@drawable/ic_heart_100"/> 

    </animation-list> 

가 ImageViews

을 설정 : 여기

고해상도/드로어 블/사진 animation_list_filling.xml에 배치, 채우고 내 마음을위한 애니메이션 목록의 예 일부는 ImageViews을 가지고 놀 수 있습니다. 구체적으로, 이전에 정의한 각 XML 드로어 블에 대해 하나씩 3 개의 ImageView를 갖습니다. 액티비티에서 원하는 레이아웃에 다음 코드를 넣고 던져 :

<ImageView 
    android:id="@+id/imageview_animation_list_filling" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/animation_list_filling" 
    /> 

을 애니메이션

ImageView mImageViewFilling = (ImageView) findViewById(R.id.imageview_animation_list_filling); 
((AnimationDrawable) mImageViewFilling.getBackground()).start(); 
+0

답변이 업데이트되었는지 확인하십시오. – AndroidHacker

+0

코드가 작동하지만 두 가지 문제가 있습니다. 1) 페이드가 없습니다. 페이드 아웃 전환. 2) 이것은 모든 이미지가 설정되면 이미지 변경을 중지합니다. – MaggotSauceYumYum

0

시작 XML 두 만들기 당신이 다음 here에서 얻을 같이로드 할 수 있습니다 .

ImageView myImageView = (ImageView) findViewById(R.id.imageView2); 
Animation myFadeInAnimation = AnimationUtils.loadAnimation(Splash.this, R.anim.fadein) 
Animation myFadeOutAnimation = AnimationUtils.loadAnimation(Splash.this, R.anim.fadeout); 

int value = 0; // Global Type 
btnStart.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if(value%2 == 0){ 
        doFadeOutAnimation(); 
       }else{ 
        doFadeInAnimation(); 
       } 
       value ++; 
      } 
     }); 
0

또 다른 방법은 Android의 Animator 클래스 (예 : ObjectAnimator) 중 하나를 사용하는 것입니다. 여기에 내가하고있는 일이있다 :

1) 사용하려는 이미지의 드로어 블 ID를 int 배열에 추가한다.

2) fadeIn 및 fadeOut 애니메이션에 대한 ObjectAnimators를 만듭니다. 페이드 인 기간을 설정하고 원하는대로 페이드 아웃 할 수 있습니다.

3) AnimatorListener를 fadeOut ObjectAnimator에 추가하여 완료되면 이미지 배열에서 임의의 숫자를 선택하여 임의로 선택한 새 이미지를 설정하고 새 이미지로 페이드 인합니다. 이미지, fadeIn ObjectAnimator 사용.

4) 실행 파일을 만들고 실행 방법에서 fadeOut 애니메이션을 시작하십시오.

5) 실행 파일에서 handler.postDelayed를 호출하고이 이미지를 사용하여 페이드 아웃하기 전에 각 이미지를 얼마나 오래 머무르게 할 것인지 결정하십시오.

6) Runnable의 run 메서드가 끝나면 handler.postDelayed를 다시 호출하여 이미지가 계속 페이드 인/페이드 아웃되도록합니다.하지만 조건부 문을 사용하여 애니메이션을 사용해야하는 이유는 "실행 중"이라는 부울을 사용하여 루프에서 처리기를 중지해야 할 때 false로 설정할 수 있기 때문입니다.

ImageView mImageView = (ImageView) findViewById(R.id.imageView); 
boolean running = true; 

final int[] images = {R.drawable.image1, R.drawable.image2, R.drawable.image3, 
    R.drawable.image4, R.drawable.image5}; 

final Random random = new Random(); 
final Handler handler = new Handler(); 

final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mImageView, "alpha", 0f, 1f); 
fadeIn.setDuration(1000); 

final ObjectAnimator fadeOut = ObjectAnimator.ofFloat(mImageView, "alpha", 1f, 0f); 
fadeOut.setDuration(1000); 
fadeOut.addListener(new Animator.AnimatorListener() { 
    @Override 
    public void onAnimationStart(Animator animation) { 

    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     int rand = random.nextInt(images.length); 
     mImageView.setImageResource(images[rand]); 
     fadeIn.start(); 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) { 

    } 

    @Override 
    public void onAnimationRepeat(Animator animation) { 

    } 
}); 


Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     fadeOut.start(); 

     if (running) { 
      handler.postDelayed(this, 5000); 
     } 
    } 
}; 

handler.postDelayed(runnable, 5000); 


} 

이것은 페이드 인/페이드 아웃 애니메이션을 사용하여 선택한 이미지를 (무작위로) 반복합니다. 동일한 이미지가 두 번 연속으로 나타나지 않도록 몇 가지 검사를 추가 할 수 있습니다.

관련 문제