All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.simonvt.threepanelayout.BuildLayerFrameLayout Maven / Gradle / Ivy

There is a newer version: 1.0.1
Show newest version
package net.simonvt.threepanelayout;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.FrameLayout;

/**
 * FrameLayout which caches the hardware layer if available.
 * 

* If it's not posted twice the layer either wont be built on start, or it'll be built twice. */ public class BuildLayerFrameLayout extends FrameLayout { private boolean mChanged; private boolean mHardwareLayersEnabled = true; private boolean mAttached; private boolean mFirst = true; public BuildLayerFrameLayout(Context context) { super(context); setLayerType(LAYER_TYPE_HARDWARE, null); } public BuildLayerFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); setLayerType(LAYER_TYPE_HARDWARE, null); } public BuildLayerFrameLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setLayerType(LAYER_TYPE_HARDWARE, null); } void setHardwareLayersEnabled(boolean enabled) { mHardwareLayersEnabled = enabled; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); mAttached = true; } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mAttached = false; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (ThreePaneLayout.USE_TRANSLATIONS && mHardwareLayersEnabled) { post(new Runnable() { @Override public void run() { mChanged = true; invalidate(); } }); } } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (mChanged && ThreePaneLayout.USE_TRANSLATIONS) { post(new Runnable() { @Override public void run() { if (mAttached) { final int layerType = getLayerType(); // If it's already a hardware layer, it'll be built anyway. if (layerType != LAYER_TYPE_HARDWARE || mFirst) { mFirst = false; setLayerType(LAYER_TYPE_HARDWARE, null); buildLayer(); setLayerType(LAYER_TYPE_NONE, null); } } } }); mChanged = false; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy