DragView.java revision b8c69f3c17a40adc2d85e8e996f754c383c293dc
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 20a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroyimport android.animation.ValueAnimator; 21a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroyimport android.animation.ValueAnimator.AnimatorUpdateListener; 22de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroyimport android.content.res.Resources; 2300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Bitmap; 2400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Canvas; 2500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Matrix; 2600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.graphics.Paint; 27b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chungimport android.graphics.Point; 28e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohenimport android.graphics.Rect; 2900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratoimport android.view.View; 30a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroyimport android.view.animation.DecelerateInterpolator; 3100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 32120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohenimport com.android.launcher.R; 33120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen 34a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroypublic class DragView extends View { 3500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private Bitmap mBitmap; 3600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private Paint mPaint; 3700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private int mRegistrationX; 3800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato private int mRegistrationY; 3900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 40b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung private Point mDragVisualizeOffset = null; 41e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen private Rect mDragRegion = null; 428dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen private DragLayer mDragLayer = null; 43fc53cd22c9a78708c78c85946443f23ec8c59502Adam Cohen private boolean mHasDrawn = false; 44a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 45a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy ValueAnimator mAnim; 46a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy private float mOffsetX = 0.0f; 47a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy private float mOffsetY = 0.0f; 4800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 498dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen private DragLayer.LayoutParams mLayoutParams; 5000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 5100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /** 5200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Construct the drag view. 5300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * <p> 5400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * The registration point is the point inside our view that the touch events should 5500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * be centered upon. 5600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 578dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen * @param launcher The Launcher instance 5800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param bitmap The view that we're dragging around. We scale it up when we draw it. 5900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param registrationX The x coordinate of the registration point. 6000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param registrationY The y coordinate of the registration point. 6100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 628dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen public DragView(Launcher launcher, Bitmap bitmap, int registrationX, int registrationY, 635162ea9b1f41dbebe00fd9ec4d1e15a697971439Joe Onorato int left, int top, int width, int height) { 648dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen super(launcher); 658dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen mDragLayer = launcher.getDragLayer(); 6600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 67de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy final Resources res = getResources(); 68de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy final int dragScale = res.getInteger(R.integer.config_dragViewExtraPixels); 69de7658b5e02ae10010e44fcf8d9c5814f54d9eb0Patrick Dubroy 7000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato Matrix scale = new Matrix(); 71a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final float scaleFactor = (width + dragScale) / width; 72a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy if (scaleFactor != 1.0f) { 73a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy scale.setScale(scaleFactor, scaleFactor); 74a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 75a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 768878a32f26b7e6c287d970950526cd0e6eabb21dAdam Cohen final int offsetX = res.getDimensionPixelSize(R.dimen.dragViewOffsetX); 778878a32f26b7e6c287d970950526cd0e6eabb21dAdam Cohen final int offsetY = res.getDimensionPixelSize(R.dimen.dragViewOffsetY); 78a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 79a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy // Animate the view into the correct position 80a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim = ValueAnimator.ofFloat(0.0f, 1.0f); 81a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.setDuration(110); 82a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.setInterpolator(new DecelerateInterpolator(2.5f)); 83a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.addUpdateListener(new AnimatorUpdateListener() { 84a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy @Override 85a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy public void onAnimationUpdate(ValueAnimator animation) { 86a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final float value = (Float) animation.getAnimatedValue(); 87a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 88a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final int deltaX = (int) ((value * offsetX) - mOffsetX); 89a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy final int deltaY = (int) ((value * offsetY) - mOffsetY); 90a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 91a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOffsetX += deltaX; 92a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mOffsetY += deltaY; 93a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 94a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy if (getParent() == null) { 95a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy animation.cancel(); 96a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } else { 978dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen DragLayer.LayoutParams lp = mLayoutParams; 98a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.x += deltaX; 99a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.y += deltaY; 1008dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen mDragLayer.requestLayout(); 101a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 102a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy } 103a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy }); 10400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 1055162ea9b1f41dbebe00fd9ec4d1e15a697971439Joe Onorato mBitmap = Bitmap.createBitmap(bitmap, left, top, width, height, scale, true); 106e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen setDragRegion(new Rect(0, 0, width, height)); 10700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 10800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato // The point in our scaled bitmap that the touch events are located 109a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mRegistrationX = registrationX; 110a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mRegistrationY = registrationY; 11162bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy 11262bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy // Force a measure, because Workspace uses getMeasuredHeight() before the layout pass 11362bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy int ms = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 11462bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy measure(ms, ms); 11562bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy } 11662bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy 11762bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy public float getOffsetY() { 11862bbb3c573fe902940431e4b957c0c4918358d36Patrick Dubroy return mOffsetY; 11900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 12000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 121a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionLeft() { 122e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen return mDragRegion.left; 123a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 124a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 125a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionTop() { 126e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen return mDragRegion.top; 127a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 128a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 129a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionWidth() { 130e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen return mDragRegion.width(); 131a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 132a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 133a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka public int getDragRegionHeight() { 134e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen return mDragRegion.height(); 135e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen } 136e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen 137b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung public void setDragVisualizeOffset(Point p) { 138b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung mDragVisualizeOffset = p; 139b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung } 140b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung 141b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung public Point getDragVisualizeOffset() { 142b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung return mDragVisualizeOffset; 143b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung } 144b8c69f3c17a40adc2d85e8e996f754c383c293dcWinson Chung 145e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen public void setDragRegion(Rect r) { 146e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen mDragRegion = r; 147e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen } 148e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen 149e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen public Rect getDragRegion() { 150e3e27a854f3eca363d3c5ce353d19de475272d87Adam Cohen return mDragRegion; 151a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka } 152a63c452f5bd491ba9b28c332ccedc6c6c7e2f3ccMichael Jurka 15300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato @Override 15400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 155eebd92496e2fbfbd81ea871862a681929101ba06Joe Onorato setMeasuredDimension(mBitmap.getWidth(), mBitmap.getHeight()); 15600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 15700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 15800acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato @Override 15900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato protected void onDraw(Canvas canvas) { 16000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato if (false) { 16100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato // for debugging 16200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato Paint p = new Paint(); 16300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato p.setStyle(Paint.Style.FILL); 16400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato p.setColor(0xaaffffff); 16500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato canvas.drawRect(0, 0, getWidth(), getHeight(), p); 16600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 167a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy 168fc53cd22c9a78708c78c85946443f23ec8c59502Adam Cohen mHasDrawn = true; 16900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato canvas.drawBitmap(mBitmap, 0.0f, 0.0f, mPaint); 17000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 17100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 17200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato public void setPaint(Paint paint) { 17300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mPaint = paint; 17400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato invalidate(); 17500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 17600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 177fc53cd22c9a78708c78c85946443f23ec8c59502Adam Cohen public boolean hasDrawn() { 178fc53cd22c9a78708c78c85946443f23ec8c59502Adam Cohen return mHasDrawn; 179fc53cd22c9a78708c78c85946443f23ec8c59502Adam Cohen } 180fc53cd22c9a78708c78c85946443f23ec8c59502Adam Cohen 1813e8f811f31a2275e778244427271f77f4116c08bAdam Cohen @Override 1823e8f811f31a2275e778244427271f77f4116c08bAdam Cohen public void setAlpha(float alpha) { 1833e8f811f31a2275e778244427271f77f4116c08bAdam Cohen super.setAlpha(alpha); 1843e8f811f31a2275e778244427271f77f4116c08bAdam Cohen if (mPaint == null) { 1853e8f811f31a2275e778244427271f77f4116c08bAdam Cohen mPaint = new Paint(); 1863e8f811f31a2275e778244427271f77f4116c08bAdam Cohen } 1873e8f811f31a2275e778244427271f77f4116c08bAdam Cohen mPaint.setAlpha((int) (255 * alpha)); 1883e8f811f31a2275e778244427271f77f4116c08bAdam Cohen invalidate(); 1893e8f811f31a2275e778244427271f77f4116c08bAdam Cohen } 1903e8f811f31a2275e778244427271f77f4116c08bAdam Cohen 19100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /** 19200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Create a window containing this view and show it. 19300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 19400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * @param windowToken obtained from v.getWindowToken() from one of your views 1958dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen * @param touchX the x coordinate the user touched in DragLayer coordinates 1968dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen * @param touchY the y coordinate the user touched in DragLayer coordinates 19700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 1988dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen public void show(int touchX, int touchY) { 1998dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen mDragLayer.addView(this); 2008dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen DragLayer.LayoutParams lp = new DragLayer.LayoutParams(0, 0); 2018dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen lp.width = mBitmap.getWidth(); 2028dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen lp.height = mBitmap.getHeight(); 2038dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen lp.x = touchX - mRegistrationX; 2048dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen lp.y = touchY - mRegistrationY; 2058dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen lp.customPosition = true; 2068dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen setLayoutParams(lp); 20700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mLayoutParams = lp; 208a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy mAnim.start(); 20900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 210716b51e030f9c6ed34af2b947760e46a280c65a6Adam Cohen 21100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato /** 21200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * Move the window containing this view. 21300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato * 2148dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen * @param touchX the x coordinate the user touched in DragLayer coordinates 2158dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen * @param touchY the y coordinate the user touched in DragLayer coordinates 21600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato */ 21700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato void move(int touchX, int touchY) { 2188dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen DragLayer.LayoutParams lp = mLayoutParams; 219a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.x = touchX - mRegistrationX + (int) mOffsetX; 220a669d79d0dcf034651ce305a8cd334272bec3374Patrick Dubroy lp.y = touchY - mRegistrationY + (int) mOffsetY; 2218dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen mDragLayer.requestLayout(); 22200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 22300acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 22400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato void remove() { 2253e8f811f31a2275e778244427271f77f4116c08bAdam Cohen post(new Runnable() { 2263e8f811f31a2275e778244427271f77f4116c08bAdam Cohen public void run() { 2278dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen mDragLayer.removeView(DragView.this); 2283e8f811f31a2275e778244427271f77f4116c08bAdam Cohen } 2293e8f811f31a2275e778244427271f77f4116c08bAdam Cohen }); 23000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato } 2316f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy 2326f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy int[] getPosition(int[] result) { 2338dfcba4af7a7ece09e8c7d96053e54f3a383e905Adam Cohen DragLayer.LayoutParams lp = mLayoutParams; 2346f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy if (result == null) result = new int[2]; 2356f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy result[0] = lp.x; 2366f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy result[1] = lp.y; 2376f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy return result; 2386f13342ffd3f968de9ff86b988621cc91d94adffPatrick Dubroy } 23900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato} 24000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato 241