DragView.java revision a669d79d0dcf034651ce305a8cd334272bec3374
100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato/* 200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Copyright (C) 2008 The Android Open Source Project 300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * you may not use this file except in compliance with the License. 600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * You may obtain a copy of the License at 700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 1000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Unless required by applicable law or agreed to in writing, software 1100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 1200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * See the License for the specific language governing permissions and 1400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * limitations under the License. 1500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 1600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 1700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 1800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratopackage com.android.launcher2; 1900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 20de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroyimport com.android.launcher.R; 21de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy 22a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroyimport android.animation.ValueAnimator; 23a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroyimport android.animation.ValueAnimator.AnimatorUpdateListener; 2400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.content.Context; 25de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroyimport android.content.res.Resources; 2600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Bitmap; 2700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Canvas; 2800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Matrix; 2900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Paint; 3000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.PixelFormat; 3100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.os.IBinder; 3200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.view.Gravity; 3300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.view.View; 3400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.view.ViewGroup; 3500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.view.WindowManager; 3600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.view.WindowManagerImpl; 37a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroyimport android.view.animation.DecelerateInterpolator; 3800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 39a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroypublic class DragView extends View { 4000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private Bitmap mBitmap; 4100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private Paint mPaint; 4200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private int mRegistrationX; 4300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private int mRegistrationY; 4400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 45a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka private int mDragRegionLeft = 0; 46a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka private int mDragRegionTop = 0; 47a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka private int mDragRegionWidth; 48a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka private int mDragRegionHeight; 49a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 50a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy ValueAnimator mAnim; 51a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy private float mScale = 1.0f; 52a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy private float mOffsetX = 0.0f; 53a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy private float mOffsetY = 0.0f; 5400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 5500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private WindowManager.LayoutParams mLayoutParams; 5600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private WindowManager mWindowManager; 5700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 5800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /** 59a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy * A callback to be called the first time this view is drawn. 60a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy * This allows the originator of the drag to dim or hide the original view as soon 61a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy * as the DragView is drawn. 62a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy */ 63a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy private Runnable mOnDrawRunnable = null; 64a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 65a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy /** 6600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Construct the drag view. 6700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * <p> 6800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * The registration point is the point inside our view that the touch events should 6900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * be centered upon. 7000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 7100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param context A context 7200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param bitmap The view that we're dragging around. We scale it up when we draw it. 7300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param registrationX The x coordinate of the registration point. 7400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param registrationY The y coordinate of the registration point. 7500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 765162ea9b1f41dbebe00fd9ec4d1e15a697971439Joe Onorato public DragView(Context context, Bitmap bitmap, int registrationX, int registrationY, 775162ea9b1f41dbebe00fd9ec4d1e15a697971439Joe Onorato int left, int top, int width, int height) { 7800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato super(context); 7900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 80de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy final Resources res = getResources(); 81de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy final int dragScale = res.getInteger(R.integer.config_dragViewExtraPixels); 82de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy 8300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mWindowManager = WindowManagerImpl.getDefault(); 8400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 8500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato Matrix scale = new Matrix(); 86a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final float scaleFactor = (width + dragScale) / width; 87a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy if (scaleFactor != 1.0f) { 88a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy scale.setScale(scaleFactor, scaleFactor); 89a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 90a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 91a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final int offsetX = res.getInteger(R.integer.config_dragViewOffsetX); 92a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final int offsetY = res.getInteger(R.integer.config_dragViewOffsetY); 93a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 94a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy // Animate the view into the correct position 95a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim = ValueAnimator.ofFloat(0.0f, 1.0f); 96a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.setDuration(110); 97a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.setInterpolator(new DecelerateInterpolator(2.5f)); 98a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.addUpdateListener(new AnimatorUpdateListener() { 99a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy @Override 100a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy public void onAnimationUpdate(ValueAnimator animation) { 101a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final float value = (Float) animation.getAnimatedValue(); 102a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 103a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final int deltaX = (int) ((value * offsetX) - mOffsetX); 104a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final int deltaY = (int) ((value * offsetY) - mOffsetY); 105a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 106a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOffsetX += deltaX; 107a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOffsetY += deltaY; 108a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 109a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy if (getParent() == null) { 110a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy animation.cancel(); 111a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } else { 112a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy WindowManager.LayoutParams lp = mLayoutParams; 113a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.x += deltaX; 114a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.y += deltaY; 115a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mWindowManager.updateViewLayout(DragView.this, lp); 116a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 117a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 118a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy }); 11900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 1205162ea9b1f41dbebe00fd9ec4d1e15a697971439Joe Onorato mBitmap = Bitmap.createBitmap(bitmap, left, top, width, height, scale, true); 1210280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka setDragRegion(0, 0, width, height); 12200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 12300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato // The point in our scaled bitmap that the touch events are located 124a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mRegistrationX = registrationX; 125a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mRegistrationY = registrationY; 12600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 12700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 128a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public void setDragRegion(int left, int top, int width, int height) { 129a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka mDragRegionLeft = left; 130a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka mDragRegionTop = top; 131a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka mDragRegionWidth = width; 132a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka mDragRegionHeight = height; 133a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 134a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 135a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy public void setOnDrawRunnable(Runnable r) { 136a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOnDrawRunnable = r; 137a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 138a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 1390280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka public int getScaledDragRegionXOffset() { 1400280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka return -(int)((mScale - 1.0f) * mDragRegionWidth / 2); 1410280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka } 1420280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka 1430280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka public int getScaledDragRegionWidth() { 1440280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka return (int)(mScale * mDragRegionWidth); 1450280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka } 1460280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka 1470280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka public int getScaledDragRegionYOffset() { 1480280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka return -(int)((mScale - 1.0f) * mDragRegionHeight / 2); 1490280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka } 1500280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka 1510280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka public int getScaledDragRegionHeight() { 1520280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka return (int)(mScale * mDragRegionWidth); 1530280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka } 1540280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka 155a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionLeft() { 156a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka return mDragRegionLeft; 157a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 158a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 159a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionTop() { 160a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka return mDragRegionTop; 161a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 162a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 163a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionWidth() { 164a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka return mDragRegionWidth; 165a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 166a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 167a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionHeight() { 168a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka return mDragRegionHeight; 169a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 170a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 17100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato @Override 17200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 173eebd92496e2fbfbd81ea871862a681929101ba06Joe Onorato setMeasuredDimension(mBitmap.getWidth(), mBitmap.getHeight()); 17400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 17500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 17600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato @Override 17700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato protected void onDraw(Canvas canvas) { 17800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato if (false) { 17900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato // for debugging 18000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato Paint p = new Paint(); 18100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato p.setStyle(Paint.Style.FILL); 18200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato p.setColor(0xaaffffff); 18300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato canvas.drawRect(0, 0, getWidth(), getHeight(), p); 18400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 185a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 186a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy // Call the callback if we haven't already been detached 187a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy if (getParent() != null) { 188a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy if (mOnDrawRunnable != null) { 189a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOnDrawRunnable.run(); 190a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOnDrawRunnable = null; 191a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 19200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 193a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 19400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato canvas.drawBitmap(mBitmap, 0.0f, 0.0f, mPaint); 19500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 19600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 19700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato @Override 19800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato protected void onDetachedFromWindow() { 19900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato super.onDetachedFromWindow(); 20000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mBitmap.recycle(); 20100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 20200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 20300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato public void setPaint(Paint paint) { 20400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mPaint = paint; 20500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato invalidate(); 20600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 20700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 20800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /** 20900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Create a window containing this view and show it. 21000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 21100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param windowToken obtained from v.getWindowToken() from one of your views 21200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param touchX the x coordinate the user touched in screen coordinates 21300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param touchY the y coordinate the user touched in screen coordinates 21400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 21500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato public void show(IBinder windowToken, int touchX, int touchY) { 21600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato WindowManager.LayoutParams lp; 21700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato int pixelFormat; 21800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 21900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato pixelFormat = PixelFormat.TRANSLUCENT; 22000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 22100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato lp = new WindowManager.LayoutParams( 22200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato ViewGroup.LayoutParams.WRAP_CONTENT, 22300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato ViewGroup.LayoutParams.WRAP_CONTENT, 224a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy touchX - mRegistrationX, touchY - mRegistrationY, 22500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL, 22600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 22700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 22800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /*| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM*/, 22900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato pixelFormat); 23000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato// lp.token = mStatusBarView.getWindowToken(); 23100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato lp.gravity = Gravity.LEFT | Gravity.TOP; 23200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato lp.token = windowToken; 23300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato lp.setTitle("DragView"); 23400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mLayoutParams = lp; 23500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 23600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mWindowManager.addView(this, lp); 23700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 238a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.start(); 23900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 24000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 24100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /** 24200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Move the window containing this view. 24300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 24400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param touchX the x coordinate the user touched in screen coordinates 24500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param touchY the y coordinate the user touched in screen coordinates 24600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 24700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato void move(int touchX, int touchY) { 24800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato WindowManager.LayoutParams lp = mLayoutParams; 249a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.x = touchX - mRegistrationX + (int) mOffsetX; 250a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.y = touchY - mRegistrationY + (int) mOffsetY; 25100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mWindowManager.updateViewLayout(this, lp); 25200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 25300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 25400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato void remove() { 25500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mWindowManager.removeView(this); 25600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 25700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato} 25800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 259