2014-02-24 46 views
0

我正試圖在我的應用中實現活動轉換。我遇到了一個很棒的here。但它只與android jellybean +兼容。上面的鏈接重定向到Nick Butcher顯示活動縮放從視圖轉換的YouTube。按鈕的活動縮放轉換 - Android

我想用薑餅(API 10)+。我怎樣才能做到這一點?我想到的一個想法是將該視圖的位置放在屏幕上,傳遞給即將到來的活動,然後要求即將開展的活動從該位置放大或縮小。我不知道這是否可能。任何想法或解決方案都非常感謝。

謝謝!

回答

1

您可以使用此動畫,並改變XY根據圖像的位置和尺寸,並開始在動畫結束,這是一個把戲你的活動,希望它能幫助:

private void centerAndZoomView(View view) 
    { 
     RelativeLayout root = (RelativeLayout) findViewById(R.id.rootLayout); 
     DisplayMetrics dm = new DisplayMetrics(); 
     this.getWindowManager().getDefaultDisplay().getMetrics(dm); 
     int statusBarOffset = dm.heightPixels - root.getMeasuredHeight(); 

     int originalPos[] = new int[2]; 
     view.getLocationOnScreen(originalPos); 

     int xDest = dm.widthPixels/2; 
     xDest -= (view.getMeasuredWidth()/2); 
     int yDest = dm.heightPixels/2 - (view.getMeasuredHeight()/2) - statusBarOffset; 

     TranslateAnimation anim = new TranslateAnimation(0, xDest - originalPos[0] , 0, yDest - originalPos[1]); 

     Animation scale 
      = new ScaleAnimation(1.0f,root.getMeasuredWidth()/view.getMeasuredWidth() , 1.0f, root.getMeasuredHeight()/view.getMeasuredHeight(), 
           Animation.RELATIVE_TO_SELF, 0.5f, 
           Animation.RELATIVE_TO_SELF, 0.5f); 
     scale.setInterpolator(new AccelerateInterpolator()); 

     AnimationSet set = new AnimationSet(false); 

     set.addAnimation(scale); 
     set.addAnimation(anim); 

     set.setFillAfter(true); 
     set.setDuration(10000); 
     //set.start(); 


     view.startAnimation(set); 
     set.setAnimationListener(new AnimationListener() 
     { 
      @Override 
      public void onAnimationStart(Animation animation){} 

      @Override 
      public void onAnimationRepeat(Animation animation){} 

      @Override 
      public void onAnimationEnd(Animation animation) 
      { 
       Intent intent = new Intent(getApplication(), NextActivity.class); 
       startActivity(intent); 

      Toast.makeText(getApplicationContext(), "END OF ANIMATION", Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 

我結合TranslateAnimation和ScaleAnimation根據屏幕寬度和高度,可以傳遞任何View(Button,ImageView,LinarLayout ...)作爲參數,並且您的根佈局必須具有「rootLayout」ID。

+0

看起來不錯。但我現在完成了android中的動畫。你能告訴我什麼時候打電話嗎?我想按鈕點擊開始一個新的活動。 –

+0

我想爲你創造,但我在工作:),那麼你可以從這裏開始:http://cogitolearning.co.uk/?p=1019 – Smile2Life

+0

謝謝!當你得到時間,請幫助我。 –

0

您可以使用Activity.overridePendingTransition()方法並指定您自己的動畫。自從API級別5以來,這一功能就已經可用。尼克在視頻中使用的只是實現相同目的的一種新方式,並在API級別16中引入。請注意,爲了支持較舊的API,您必須使用一個Animation資源(補間動畫),而不是Animator類型。你可以做翻譯,alpha和縮放(縮放)類型的動畫。

+0

我讀了'overridePendingTransition()',但我認爲它不可能做到Nick使用這種方法做的事情。你能告訴我一個很好的網站,這是解釋或如果你知道它,請幫助我! –

+0

我沒有機會觀看整個視頻,所以我無法評論他到底在做什麼。但是,我已經能夠使用這種方法,而無需執行我自己的自定義動畫。他具體做什麼,你認爲是不可能的? –

+0

他通過從視圖中縮放來開始新活動的部分 –