butter android views

Post on 10-May-2015

430 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Butter Android Views김용욱

● Overdraws● Hardware acceleration● Layers● ValueAnimators● ObjectAnimators with DisplayList properties● SurfaceView vs TextureView

About me

김용욱 (dalinaum)http://goo.gl/EPCr0안드로이드 GDE

Show GPU overdraws

UI 상의 불필요한 요소를 쉽게 찾을 수 있습니다. (4.2+)

두개의 옵션을 활성화하십시요.

Worst case

● blue: 1x (2회)● green: 2x● light red: 3x● dark red: 4x

우리의 소원은 2x

1x

2x

3x

4x

왜 배경이 1x일까요?

● window 배경 1회● view 배경 1회● 1 + 1 = 귀요미?

꼭 윈도우 배경 제거합시다.

1x

2x

3x

4x

android:windowBackground @null

getWindow().setBackgroundDrawable(null);

transparent를 하지 맙시다.

1x

2x

3x

4x

overdraw GPU 최적화?

Deferred rendering을 하면 여러번 안 그립니다.

대표적인 구현: SGX

Nvidia 테그라는 무조건 횟수만큼 그립니다.

하드웨어 가속

하드웨어 가속

android:hardwareAccelerated="true"

허니컴 이후 부터 사용 가능.

이후 암시적으로 활성화되지만 명시적인게 좋다고 생각함.

일부 하드웨어가 암시적인 활성화를 무시하기 때문.

디스플레이 리스트

Layer하드웨어 레이어:● 캐쉬를 FBO에 저장.

(FrameBufferObject)● 한정된 영역.● view.setLayerType

(View.LAYER.HARDWARE, null)

소프트웨어 레이어:● 비트맵 보관● view.setLayerType

(View.LAYER.SOFTWARE, null)

다양한 속성에 대한 에니메이션

ValueAnimator: View 이외에도 대부분의 속성에 대해 적용가능한 에니메이터 객체. (HC 11)

linear

non-linear

ValueAnimator va = ValueAnimator.ofInt(0, height); va.setDuration(700); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { Integer value = (Integer) animation.getAnimatedValue(); v.getLayoutParams().height = value.intValue(); v.requestLayout(); } });

에니메이션을 빠르게 하는 방법은 없나요? (JB)

에니메이션을 빠르게 하는 방법은 없나요? (JB)

객체의 프로퍼티에 대한 디스플레이 리스트가 확장.(DLProps)

● alpha● translationX/Y● scaleX/Y● rotationX/YViewPropertyAnimator(HC 12), ObjectAnimator (HC 11)

ObjectAnimator

ObjectAnimator.ofFloat(myObject, "alpha", 0f).start();

객체의 named property에 대한 에니메이션.

ViewPropertyAnimator

myView.animate().alpha(0);

animatingButton.animate().setDuration(2000);

(ObjectAnimator의 쉬운 방법)

SurfaceView's adventures in Wonderland

API에서는 보이지만 회전, 확대, 알파 모든 것이 안됩니다.SurfaceView (+GLSurfaceView)는 View 영역은 아래에 Surface가 보일 수 있도록 투명하게 합니다.(홀 펀칭)

대안: TextureView

뷰의 모든 기능을 사용가능.

GLSurfaceView등의 확장이 없기 때문에 스스로 만들어 써야 함.

3D 그래픽을 하는 것만 조금 까다로움. (기본 코드가 없음.)

젤리빈 이상만 가능.

OpenGL

TextureView Demo

https://github.com/dalinaum/TextureViewDemohttps://play.google.com/store/apps/details?id=kr.gdg.android.textureview

감사합니다.

top related