am 9279d45b: DessertCase memory improvements
* commit '9279d45b8d26c88c69fa917816ea396142627020': DessertCase memory improvements
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package com.android.systemui;
|
package com.android.systemui;
|
||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.animation.AnimatorSet;
|
import android.animation.AnimatorSet;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -166,15 +167,19 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
if (mCellSize < 512) { // assuming 512x512 images
|
if (mCellSize < 512) { // assuming 512x512 images
|
||||||
opts.inSampleSize = 2;
|
opts.inSampleSize = 2;
|
||||||
}
|
}
|
||||||
|
opts.inMutable = true;
|
||||||
|
Bitmap loaded = null;
|
||||||
for (int[] list : new int[][] { PASTRIES, RARE_PASTRIES, XRARE_PASTRIES, XXRARE_PASTRIES }) {
|
for (int[] list : new int[][] { PASTRIES, RARE_PASTRIES, XRARE_PASTRIES, XXRARE_PASTRIES }) {
|
||||||
for (int resid : list) {
|
for (int resid : list) {
|
||||||
final BitmapDrawable d = new BitmapDrawable(res,
|
opts.inBitmap = loaded;
|
||||||
convertToAlphaMask(BitmapFactory.decodeResource(res, resid, opts)));
|
loaded = BitmapFactory.decodeResource(res, resid, opts);
|
||||||
|
final BitmapDrawable d = new BitmapDrawable(res, convertToAlphaMask(loaded));
|
||||||
d.setColorFilter(new ColorMatrixColorFilter(ALPHA_MASK));
|
d.setColorFilter(new ColorMatrixColorFilter(ALPHA_MASK));
|
||||||
d.setBounds(0, 0, mCellSize, mCellSize);
|
d.setBounds(0, 0, mCellSize, mCellSize);
|
||||||
mDrawables.append(resid, d);
|
mDrawables.append(resid, d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
loaded = null;
|
||||||
if (DEBUG) setWillNotDraw(false);
|
if (DEBUG) setWillNotDraw(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,8 +309,6 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
v.getOverlay().add(d);
|
v.getOverlay().add(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
|
||||||
|
|
||||||
lp.width = lp.height = mCellSize;
|
lp.width = lp.height = mCellSize;
|
||||||
addView(v, lp);
|
addView(v, lp);
|
||||||
place(v, pt, false);
|
place(v, pt, false);
|
||||||
@@ -314,7 +317,7 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
v.setScaleX(0.5f * s);
|
v.setScaleX(0.5f * s);
|
||||||
v.setScaleY(0.5f * s);
|
v.setScaleY(0.5f * s);
|
||||||
v.setAlpha(0f);
|
v.setAlpha(0f);
|
||||||
v.animate().scaleX(s).scaleY(s).alpha(1f).setDuration(animationLen);
|
v.animate().withLayer().scaleX(s).scaleY(s).alpha(1f).setDuration(animationLen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -323,6 +326,21 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
place(v, new Point(irand(0, mColumns), irand(0, mRows)), animate);
|
place(v, new Point(irand(0, mColumns), irand(0, mRows)), animate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we don't have .withLayer() on general Animators
|
||||||
|
private final Animator.AnimatorListener makeHardwareLayerListener(final View v) {
|
||||||
|
return new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationStart(Animator animator) {
|
||||||
|
v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||||
|
v.buildLayer();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animator) {
|
||||||
|
v.setLayerType(View.LAYER_TYPE_NONE, null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private final HashSet<View> tmpSet = new HashSet<View>();
|
private final HashSet<View> tmpSet = new HashSet<View>();
|
||||||
public synchronized void place(View v, Point pt, boolean animate) {
|
public synchronized void place(View v, Point pt, boolean animate) {
|
||||||
final int i = pt.x;
|
final int i = pt.x;
|
||||||
@@ -370,7 +388,8 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
if (squatter != v) {
|
if (squatter != v) {
|
||||||
squatter.setTag(TAG_POS, null);
|
squatter.setTag(TAG_POS, null);
|
||||||
if (animate) {
|
if (animate) {
|
||||||
squatter.animate().scaleX(0.5f).scaleY(0.5f).alpha(0)
|
squatter.animate().withLayer()
|
||||||
|
.scaleX(0.5f).scaleY(0.5f).alpha(0)
|
||||||
.setDuration(DURATION)
|
.setDuration(DURATION)
|
||||||
.setInterpolator(new AccelerateInterpolator())
|
.setInterpolator(new AccelerateInterpolator())
|
||||||
.setListener(new Animator.AnimatorListener() {
|
.setListener(new Animator.AnimatorListener() {
|
||||||
@@ -397,6 +416,7 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
|
|
||||||
if (animate) {
|
if (animate) {
|
||||||
v.bringToFront();
|
v.bringToFront();
|
||||||
|
|
||||||
AnimatorSet set1 = new AnimatorSet();
|
AnimatorSet set1 = new AnimatorSet();
|
||||||
set1.playTogether(
|
set1.playTogether(
|
||||||
ObjectAnimator.ofFloat(v, View.SCALE_X, (float) scale),
|
ObjectAnimator.ofFloat(v, View.SCALE_X, (float) scale),
|
||||||
@@ -404,7 +424,6 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
);
|
);
|
||||||
set1.setInterpolator(new AnticipateOvershootInterpolator());
|
set1.setInterpolator(new AnticipateOvershootInterpolator());
|
||||||
set1.setDuration(DURATION);
|
set1.setDuration(DURATION);
|
||||||
set1.start();
|
|
||||||
|
|
||||||
AnimatorSet set2 = new AnimatorSet();
|
AnimatorSet set2 = new AnimatorSet();
|
||||||
set2.playTogether(
|
set2.playTogether(
|
||||||
@@ -414,6 +433,10 @@ public class DessertCaseView extends FrameLayout {
|
|||||||
);
|
);
|
||||||
set2.setInterpolator(new DecelerateInterpolator());
|
set2.setInterpolator(new DecelerateInterpolator());
|
||||||
set2.setDuration(DURATION);
|
set2.setDuration(DURATION);
|
||||||
|
|
||||||
|
set1.addListener(makeHardwareLayerListener(v));
|
||||||
|
|
||||||
|
set1.start();
|
||||||
set2.start();
|
set2.start();
|
||||||
} else {
|
} else {
|
||||||
v.setX(i * mCellSize + (scale-1) * mCellSize /2);
|
v.setX(i * mCellSize + (scale-1) * mCellSize /2);
|
||||||
|
|||||||
Reference in New Issue
Block a user