mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
- organizing imports - remove redundant modifiers on LauncherCallback interface - fix typos Change-Id: I61eb985cac7c1379b6b804a67d4f234386d3d1b4
98 lines
3.2 KiB
Java
98 lines
3.2 KiB
Java
/*
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.launcher3.folder;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.Rect;
|
|
import android.view.View;
|
|
import android.widget.ImageView;
|
|
|
|
import com.android.launcher3.Launcher;
|
|
import com.android.launcher3.R;
|
|
import com.android.launcher3.dragndrop.DragLayer;
|
|
|
|
/**
|
|
* A temporary view which displays the a bitmap (used for folder icon animation)
|
|
*/
|
|
public class PreviewImageView extends ImageView {
|
|
|
|
private final Rect mTempRect = new Rect();
|
|
private final DragLayer mParent;
|
|
|
|
private Bitmap mBitmap;
|
|
private Canvas mCanvas;
|
|
|
|
public PreviewImageView(DragLayer parent) {
|
|
super(parent.getContext());
|
|
mParent = parent;
|
|
}
|
|
|
|
public void copy(View view) {
|
|
final int width = view.getMeasuredWidth();
|
|
final int height = view.getMeasuredHeight();
|
|
|
|
if (mBitmap == null || mBitmap.getWidth() != width || mBitmap.getHeight() != height) {
|
|
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
|
mCanvas = new Canvas(mBitmap);
|
|
}
|
|
|
|
DragLayer.LayoutParams lp;
|
|
if (getLayoutParams() instanceof DragLayer.LayoutParams) {
|
|
lp = (DragLayer.LayoutParams) getLayoutParams();
|
|
} else {
|
|
lp = new DragLayer.LayoutParams(width, height);
|
|
}
|
|
|
|
// The layout from which the folder is being opened may be scaled, adjust the starting
|
|
// view size by this scale factor.
|
|
float scale = mParent.getDescendantRectRelativeToSelf(view, mTempRect);
|
|
lp.customPosition = true;
|
|
lp.x = mTempRect.left;
|
|
lp.y = mTempRect.top;
|
|
lp.width = (int) (scale * width);
|
|
lp.height = (int) (scale * height);
|
|
|
|
mCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
|
|
view.draw(mCanvas);
|
|
setImageBitmap(mBitmap);
|
|
|
|
// Just in case this image view is still in the drag layer from a previous animation,
|
|
// we remove it and re-add it.
|
|
removeFromParent();
|
|
mParent.addView(this, lp);
|
|
}
|
|
|
|
public void removeFromParent() {
|
|
if (mParent.indexOfChild(this) != -1) {
|
|
mParent.removeView(this);
|
|
}
|
|
}
|
|
|
|
public static PreviewImageView get(Context context) {
|
|
DragLayer dragLayer = Launcher.getLauncher(context).getDragLayer();
|
|
PreviewImageView view = (PreviewImageView) dragLayer.getTag(R.id.preview_image_id);
|
|
if (view == null) {
|
|
view = new PreviewImageView(dragLayer);
|
|
dragLayer.setTag(R.id.preview_image_id, view);
|
|
}
|
|
return view;
|
|
}
|
|
}
|