2014-07-05 78 views
20

我有兩個圖像,我想淡入淡出。 最初他們都使用imageview。然後我使用.getDrawable()獲取圖像的可繪製。Crossfading使用TransitionDrawable不工作在android

這是我用

Drawable backgrounds[] = new Drawable[2]; 
backgrounds[0] = BackgroundImage.getDrawable(); 
backgrounds[1] = BackgroundImageBlurred.getDrawable(); 

TransitionDrawable crossfader = new TransitionDrawable(backgrounds); 
crossfader.startTransition(3000); 

它僅示出了第一個數組元素,這也無妨示出,因爲兩個圖像被在XML設置爲可見的圖像的代碼。

過渡不啓動

任何幫助,將不勝感激:)

回答

27

下面是一個例子IF你有2個可繪製,並希望他們的動畫在某些ImageView轉型:

package com.example.app; 

import android.app.Activity; 
import android.content.res.Resources; 
import android.graphics.drawable.Drawable; 
import android.graphics.drawable.TransitionDrawable; 
import android.os.Bundle; 
import android.widget.ImageView; 

class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Drawable backgrounds[] = new Drawable[2]; 
     Resources res = getResources(); 
     backgrounds[0] = res.getDrawable(android.R.drawable.btn_star_big_on); 
     backgrounds[1] = res.getDrawable(android.R.drawable.btn_star_big_off); 

     TransitionDrawable crossfader = new TransitionDrawable(backgrounds); 

     ImageView image = (ImageView)findViewById(R.id.image); 
     image.setImageDrawable(crossfader); 

     crossfader.startTransition(3000); 

    } 
} 

然後,如果你想轉換回原始圖像,你可以撥打電話

// Make sure the transition occurred 
crossfader.startTransition(0); 
// Reverse transition 
crossfader.reverseTransition(3000); 

如果我誤解了你的問題,請糾正我。

+2

你忘了加上'crossfader.setCrossFadeEnabled(真);' –

+1

應當指出的是,半淡入淡出透明背景不起作用,這將使兩個drawable在最後重疊。 – Warpzit

2

A TransitionDrawable只是一種特殊的drawable。它不是自行繪製的,它必須放置在某處(例如,在ViewView上,在ImageView上,& c)才能顯示。

如果你試圖交叉衰減兩個圖像,你有兩種可能的方法:

  1. 使用 ImageView的一個TransitionDrawable
  2. 使用兩個ImageViews和crossfade them with animations
10

您應該使用setCrossFadeEnabled屬性格式

final TransitionDrawable briefcaseTransition = (TransitionDrawable) briefcase.getDrawable(); 
briefcaseTransition.setCrossFadeEnabled(true); 
briefcaseTransition.startTransition(500); 
3

也許你像這樣的
- RES /繪製/ transition.xml:

<?xml version="1.0" encoding="utf-8"?> 
<transition xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/on" /> 
    <item android:drawable="@drawable/off" /> 
</transition> 

的ImageView:

<ImageButton android:id="@+id/button" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/transition" /> 

Javacode:

ImageButton button = (ImageButton) findViewById(R.id.button); 
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable(); 
drawable.startTransition(500); 

如果它是有益的,你可以看到谷歌-DEV:

http://developer.android.com/guide/topics/resources/drawable-resource.html