2013-02-03 68 views
0

我看着H & M Android應用程序,並試圖找出如何實現一些小部件。 任何人都可以有一個想法如何實現這個圖像框架? 我可以猜測它使用openGL。如何在Android中實現這個圖像堆棧效果?

https://lh6.ggpht.com/Q-WH9L6rIIPEaEpp2ty0uXH7VqDbVqE_0x2f22o4cjvCHsVm-lTDtfqRkGWRRzywnas

+0

你想只是像上面的堆棧效果,或者你想堆疊在其他人的圖像(線谷歌2.3畫廊)? –

+0

可能是帶有ImageView和TextView的LinearLayout,圖像被設置爲LinearLayout的背景,在您看到的邊框上產生效果。對於左右分頁,他們可能使用ViewPager。 – Brandon

+0

只是堆棧效果 – Ronel

回答

1

透明的PNG幀?這也可能是九補丁!

+0

這種方法的+1。這裏有一些有用的鏈接http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch和http://developer.android.com/tools/help/draw9patch.html – cottonBallPaws

+0

This現場效果不是PNG – Ronel

+0

好吧!那麼動畫PNG呢?將OpenGL添加到一個簡單的新聞應用程序似乎太「沉重」了!當然你可以實現它,但我認爲它比一個複雜而簡單的方法更難! – madlymad

1

我會冒險猜測;)

首先創建正面圖像。在這種情況下,它是通過使用ImageView和TextView使線性佈局膨脹來構建的。然後將其緩存到位圖(在設置階段,而不是繪製時間)。

在onDraw中,該位圖被繪製到屏幕上。然後剪切畫布以避免再繪製該區域。節省大量的繪圖時間,不會對透明像素進行四重透視。

然後,背景被繪製這樣的:

 for(int i = NUMBER_OF_LAYERS - 1; i > 0; i--) { 
      canvas.save(); 
      float rotation = MAX_ANGLE * shiftModifier * ((float) i/(NUMBER_OF_LAYERS - 1)); 
      canvas.rotate(rotation, mImageHalfWidth, mImageHalfHeight); 
      paint.setAlpha((int) (255f/(2 * i))); 
      canvas.drawRect(mBitmap.getBounds(), paint); 
      canvas.restore(); 
     } 

NUMBER_OF_LAYERS是背景層的數量。

MAX_ANGLE是最傾斜層的旋轉角度。

shiftModifier用於爲背景圖層設置動畫。它從零(完全隱藏的背景)移動到一個(背景角度= MAX_ANGLE)。

油漆只是一個顏色設置爲白色的油漆。