package com.rendernode.test.demos; import android.graphics.PixelFormat; import android.os.Bundle; import com.glview.animation.ObjectAnimator; import com.glview.animation.ValueAnimator; import com.glview.animation.ValueAnimator.AnimatorUpdateListener; import com.glview.graphics.Bitmap; import com.glview.view.Gravity; import com.glview.view.View; import com.glview.view.ViewTreeObserver.OnPreDrawListener; import com.glview.widget.FrameLayout; import com.glview.widget.FrameLayout.LayoutParams; import com.glview.widget.ImageView; import com.glview.widget.ImageView.ScaleType; import com.glview.widget.LinearLayout; import com.rendernode.test.R; public class HardwareLayerActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setGLContentView(new FrameLayout(this)); getSurfaceView().setZOrderOnTop(true); getSurfaceView().getHolder().setFormat(PixelFormat.TRANSLUCENT); } @Override public void onAttached(View content) { super.onAttached(content); LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER); final LinearLayout l = new LinearLayout(this); ((FrameLayout) content).addView(l, lp); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(300, 300); // LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); ImageView v = new ImageView(this); v.setImageResource(R.drawable.bitmap1); v.setScaleType(ScaleType.FIT_XY); l.addView(v, lp1); v = new ImageView(this); v.setImageResource(R.drawable.bitmap1); v.setScaleType(ScaleType.FIT_XY); // v.setLayerType(View.LAYER_TYPE_HARDWARE); l.addView(v, lp1); v = new ImageView(this); v.setImageResource(R.drawable.bitmap1); v.setScaleType(ScaleType.FIT_XY); l.addView(v, lp1); // l.setLayerType(View.LAYER_TYPE_HARDWARE); ObjectAnimator animator = ObjectAnimator.ofFloat(l.getChildAt(1), "rotation", 0, 1000); animator.setDuration(5000); animator.setRepeatCount(ValueAnimator.INFINITE); animator.setRepeatMode(ValueAnimator.REVERSE); // animator.start(); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // l.getChildAt(0).invalidate(); } }); final ImageView cache = new ImageView(this); cache.setScaleType(ScaleType.FIT_XY); // cache.setBackgroundColor(Color.RED); lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); ((FrameLayout) content).addView(cache, lp); l.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { @Override public boolean onPreDraw() { Bitmap bitmap = l.getDrawingCache(); cache.setImageBitmap(bitmap); l.getViewTreeObserver().removeOnPreDrawListener(this); return false; } }); } }