mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 23:36:47 +00:00
Disable zoom/pan for built-in wallpapers
This commit is contained in:
@@ -17,12 +17,13 @@
|
||||
package com.android.launcher3;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.RectF;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.ScaleGestureDetector;
|
||||
import android.view.ScaleGestureDetector.OnScaleGestureListener;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
|
||||
|
||||
import com.android.photos.views.TiledImageRenderer.TileSource;
|
||||
import com.android.photos.views.TiledImageView;
|
||||
@@ -32,6 +33,8 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
|
||||
private ScaleGestureDetector mScaleGestureDetector;
|
||||
private float mLastX, mLastY;
|
||||
private float mMinScale;
|
||||
private boolean mTouchEnabled = true;
|
||||
private RectF mTempEdges = new RectF();
|
||||
|
||||
public CropView(Context context) {
|
||||
this(context, null);
|
||||
@@ -42,7 +45,7 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
|
||||
mScaleGestureDetector = new ScaleGestureDetector(context, this);
|
||||
}
|
||||
|
||||
public RectF getCrop() {
|
||||
private void getEdgesHelper(RectF edgesOut) {
|
||||
final float width = getWidth();
|
||||
final float height = getHeight();
|
||||
final float imageWidth = mRenderer.source.getImageWidth();
|
||||
@@ -53,13 +56,25 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
|
||||
float centerY = (height / 2f - mRenderer.centerY + (imageHeight - height) / 2f)
|
||||
* scale + height / 2f;
|
||||
float leftEdge = centerX - imageWidth / 2f * scale;
|
||||
float rightEdge = centerX + imageWidth / 2f * scale;
|
||||
float topEdge = centerY - imageHeight / 2f * scale;
|
||||
float bottomEdge = centerY + imageHeight / 2f * scale;
|
||||
|
||||
float cropLeft = -leftEdge / scale;
|
||||
float cropTop = -topEdge / scale;
|
||||
float cropRight = cropLeft + width / scale;
|
||||
float cropBottom = cropTop + height / scale;
|
||||
RectF cropRect = new RectF(cropLeft, cropTop, cropRight, cropBottom);
|
||||
edgesOut.left = leftEdge;
|
||||
edgesOut.right = rightEdge;
|
||||
edgesOut.top = topEdge;
|
||||
edgesOut.bottom = bottomEdge;
|
||||
}
|
||||
|
||||
public RectF getCrop() {
|
||||
final RectF edges = mTempEdges;
|
||||
getEdgesHelper(edges);
|
||||
final float scale = mRenderer.scale;
|
||||
|
||||
float cropLeft = -edges.left / scale;
|
||||
float cropTop = -edges.top / scale;
|
||||
float cropRight = cropLeft + getWidth() / scale;
|
||||
float cropBottom = cropTop + getHeight() / scale;
|
||||
|
||||
return new RectF(cropLeft, cropTop, cropRight, cropBottom);
|
||||
}
|
||||
@@ -102,8 +117,32 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
|
||||
public void onScaleEnd(ScaleGestureDetector detector) {
|
||||
}
|
||||
|
||||
public void moveToUpperLeft() {
|
||||
if (getWidth() == 0 || getHeight() == 0) {
|
||||
final ViewTreeObserver observer = getViewTreeObserver();
|
||||
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
|
||||
public void onGlobalLayout() {
|
||||
moveToUpperLeft();
|
||||
getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
}
|
||||
});
|
||||
}
|
||||
final RectF edges = mTempEdges;
|
||||
getEdgesHelper(edges);
|
||||
final float scale = mRenderer.scale;
|
||||
mRenderer.centerX += Math.ceil(edges.left / scale);
|
||||
mRenderer.centerY += Math.ceil(edges.top / scale);
|
||||
}
|
||||
|
||||
public void setTouchEnabled(boolean enabled) {
|
||||
mTouchEnabled = enabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if (!mTouchEnabled) {
|
||||
return true;
|
||||
}
|
||||
int action = event.getActionMasked();
|
||||
final boolean pointerUp = action == MotionEvent.ACTION_POINTER_UP;
|
||||
final int skipIndex = pointerUp ? event.getActionIndex() : -1;
|
||||
@@ -133,30 +172,20 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
|
||||
if (mRenderer.source != null) {
|
||||
// Adjust position so that the wallpaper covers the entire area
|
||||
// of the screen
|
||||
final float width = getWidth();
|
||||
final float height = getHeight();
|
||||
final float imageWidth = mRenderer.source.getImageWidth();
|
||||
final float imageHeight = mRenderer.source.getImageHeight();
|
||||
final RectF edges = mTempEdges;
|
||||
getEdgesHelper(edges);
|
||||
final float scale = mRenderer.scale;
|
||||
float centerX = (width / 2f - mRenderer.centerX + (imageWidth - width) / 2f)
|
||||
* scale + width / 2f;
|
||||
float centerY = (height / 2f - mRenderer.centerY + (imageHeight - height) / 2f)
|
||||
* scale + height / 2f;
|
||||
float leftEdge = centerX - imageWidth / 2f * scale;
|
||||
float rightEdge = centerX + imageWidth / 2f * scale;
|
||||
float topEdge = centerY - imageHeight / 2f * scale;
|
||||
float bottomEdge = centerY + imageHeight / 2f * scale;
|
||||
if (leftEdge > 0) {
|
||||
mRenderer.centerX += Math.ceil(leftEdge / scale);
|
||||
if (edges.left > 0) {
|
||||
mRenderer.centerX += Math.ceil(edges.left / scale);
|
||||
}
|
||||
if (rightEdge < getWidth()) {
|
||||
mRenderer.centerX += (rightEdge - getWidth()) / scale;
|
||||
if (edges.right < getWidth()) {
|
||||
mRenderer.centerX += (edges.right - getWidth()) / scale;
|
||||
}
|
||||
if (topEdge > 0) {
|
||||
mRenderer.centerY += Math.ceil(topEdge / scale);
|
||||
if (edges.top > 0) {
|
||||
mRenderer.centerY += Math.ceil(edges.top / scale);
|
||||
}
|
||||
if (bottomEdge < getHeight()) {
|
||||
mRenderer.centerY += (bottomEdge - getHeight()) / scale;
|
||||
if (edges.bottom < getHeight()) {
|
||||
mRenderer.centerY += (edges.bottom - getHeight()) / scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,9 +95,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
|
||||
} else if (meta.mGalleryImageUri != null) {
|
||||
mCropView.setTileSource(new BitmapRegionTileSource(WallpaperPickerActivity.this,
|
||||
meta.mGalleryImageUri, 1024, 0), null);
|
||||
mCropView.setTouchEnabled(true);
|
||||
} else {
|
||||
mCropView.setTileSource(new BitmapRegionTileSource(WallpaperPickerActivity.this,
|
||||
meta.mWallpaperResId, 1024, 0), null);
|
||||
mCropView.setTouchEnabled(false);
|
||||
mCropView.moveToUpperLeft();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user