2012-11-15 29 views
3

ImageView是動畫與旋轉的動畫:爲什麼使用動畫設置可見性失敗?

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.LinearInterpolator; 
import android.view.animation.RotateAnimation; 
import android.widget.ImageView; 

public class Test extends Activity implements View.OnClickListener { 
    private ImageView mIcon; 
    private Animation mRotate; 
    private boolean mShown = true; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mIcon = new ImageView(this); 
     mIcon.setImageDrawable(
       getResources().getDrawable(android.R.drawable.ic_dialog_alert) 
      ); 
     mIcon.setOnClickListener(this); 

     setContentView(mIcon); 


     mRotate = new RotateAnimation(
        0f,360f, 
        getWindowManager().getDefaultDisplay().getWidth()/2, 
        getWindowManager().getDefaultDisplay().getHeight()/2 
       ); 
     mRotate.setDuration(2000); 
     mRotate.setRepeatMode(Animation.RESTART); 
     mRotate.setRepeatCount(Animation.INFINITE); 
     mRotate.setInterpolator(new LinearInterpolator()); 

     mIcon.setAnimation(mRotate); 
    } 

    @Override 
    public void onClick(View view) { 
     if(mShown){ 
      mRotate.cancel(); 
      mIcon.setVisibility(View.GONE); 
     }else { 
      mIcon.setVisibility(View.VISIBLE); 
      mRotate.reset(); 
      mRotate.start(); 
     } 
     mShown = !mShown; 
    } 
} 

的部分mProgress.setVisibility(GONE);不起作用。 ImageView根本不隱藏。如果我沒有爲它設置Animation,它運行良好。

我的問題是:爲什麼動畫視圖的可見性沒有改變?

更新: 在FrameLayout包裝視圖和設置FrameLayout的visibilty作品。但是,這仍然是一個醜陋的解決方法。

回答

2

我認爲它的工作原理應該如此。讓我解釋。這裏重要的是如何你的ImageView是動畫。如果你使用例如TranslateAnimation(我想這是你的情況),那麼你的動畫視圖實際上並沒有改變位置,它只能移動到屏幕上的其他位置,例如,如果你用這種方式爲動畫按鈕設置動畫並且想單擊它,你仍然需要點擊它以前的位置。所以在這種情況下,我認爲你的ImageViewGONE,但你只能看到動畫製作的圖畫。 使用ObjectAnimator應該解決這個問題,因爲與其他動畫相反,它實際上會移動視圖。

+1

這是一個旋轉動畫(更新問題)。我沿着同樣的思路思考,但在動畫被取消之後,可見性設置爲GONE,我相信該區域必須重新繪製(因爲視圖不再可見)。所以,很難消化這只是動畫師渲染視圖的剩餘部分。 –

+0

我已經用獨立活動更新了問題,您可以運行它並查看我的意思。 –

0

嘗試

mProgress.setVisibility(View.GONE);

而不是

mProgress.setVisibility(GONE);

0

嘗試設置mRotate.setFillAfter(false)。您的視圖可見性確實消失了,但動畫的最終狀態保持其位置。

0

在將可見性設置爲GONE之前,請嘗試執行mIcon.clearAnimation()。

相關問題