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
1x

                         2x
                              3x


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

●   dark red: 4x

우리의 소원은 2x
왜 배경이 1x일까요?          1x

                      2x


● window 배경 1회             3x


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


꼭 윈도우 배경 제거
합시다.
android:                 1x

windowBackground         2x

@null                         3x




getWindow().
setBackgroundDraw   4x

able(null);

transparent를 하지
맙시다.
overdraw GPU 최적화?

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

대표적인 구현: SGX

Nvidia 테그라는 무조건 횟수만큼 그립니다.
하드웨어 가속
하드웨어 가속

android:hardwareAccelerated="true"

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

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

일부 하드웨어가 암시적인 활성화를 무시하기
때문.
디스플레이 리스트
Layer
하드웨어 레이어:
● 캐쉬를 FBO에 저장.
  (FrameBufferObject)
● 한정된 영역.
● view.setLayerType
  (View.LAYER.
  HARDWARE, null)

소프트웨어 레이어:
● 비트맵 보관
● view.setLayerType
  (View.LAYER.
  SOFTWARE, null)
다양한 속성에 대한 에니메이션
                          linear




non-linear




ValueAnimator: View 이외에도 대부분의 속성에
대해 적용가능한 에니메이터 객체. (HC 11)
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/TextureViewDemo
https://play.google.com/store/apps/details?
id=kr.gdg.android.textureview
감사합니다.

Butter android views