/** Synchronizes state when the owning Activity is resumed. */ void onActivityResume() { if (mService == null) { return; } if (mLayerDrawable == null) { if (DEBUG) Log.v(TAG, "onActivityResume: released state, syncing with service"); syncWithService(); } else { if (DEBUG) Log.v( TAG, "onActivityResume: updating service color " + mBackgroundColor + " drawable " + mBackgroundDrawable); mService.setColor(mBackgroundColor); mService.setDrawable(mBackgroundDrawable); } }
/** * Set the given bitmap into the background. When using setBitmap to set the background, the * provided bitmap will be scaled and cropped to correctly fit within the dimensions of the view. * The timing for when this becomes visible in the app is undefined and may take place after a * small delay. */ public void setBitmap(Bitmap bitmap) { if (DEBUG) { Log.v(TAG, "setBitmap " + bitmap); } if (bitmap == null) { setDrawableInternal(null); return; } if (bitmap.getWidth() <= 0 || bitmap.getHeight() <= 0) { if (DEBUG) { Log.v(TAG, "invalid bitmap width or height"); } return; } if (mBackgroundDrawable instanceof BitmapDrawable && ((BitmapDrawable) mBackgroundDrawable).getBitmap() == bitmap) { if (DEBUG) { Log.v(TAG, "same bitmap detected"); } mService.setDrawable(mBackgroundDrawable); return; } if (SCALE_BITMAPS_TO_FIT && (bitmap.getWidth() != mWidthPx || bitmap.getHeight() != mHeightPx)) { // Scale proportionately to fit width and height. Matrix matrix = new Matrix(); int dwidth = bitmap.getWidth(); int dheight = bitmap.getHeight(); float scale; int dx; if (DEBUG) { Log.v(TAG, "original image size " + dwidth + "x" + dheight); } if (dwidth * mHeightPx > mWidthPx * dheight) { scale = (float) mHeightPx / (float) dheight; } else { scale = (float) mWidthPx / (float) dwidth; } matrix.setScale(scale, scale); if (DEBUG) { Log.v(TAG, "original image size " + bitmap.getWidth() + "x" + bitmap.getHeight()); } int subX = Math.min((int) (mWidthPx / scale), dwidth); int subY = Math.min((int) (mHeightPx / scale), dheight); dx = Math.max(0, (dwidth - subX) / 2); bitmap = Bitmap.createBitmap(bitmap, dx, 0, subX, subY, matrix, true); if (DEBUG) { Log.v(TAG, "new image size " + bitmap.getWidth() + "x" + bitmap.getHeight()); } } BitmapDrawable bitmapDrawable = new BitmapDrawable(mContext.getResources(), bitmap); setDrawableInternal(bitmapDrawable); }