2016-01-13 72 views
1

我在我的應用程序中使用拖放功能。它工作正常。如果視圖回到原始位置(如果視圖未放置在放置視圖上),現在我面臨的問題是動畫視圖。在View.OnDragListener上獲取拖動的陰影位置

我已經

View.DragShadowBuilder shadowBuilder = new MyDragShadowBuilder(view); 
           view.startDrag(data, shadowBuilder, view, 0); 

創造了我的影子,查看和我shadowbuilder類,

private static class MyDragShadowBuilder extends View.DragShadowBuilder { 
    private static Drawable shadow; 

    public MyDragShadowBuilder(View v) { 
     // Stores the View parameter passed to myDragShadowBuilder. 
     super(v); 
     v.buildDrawingCache(); 
     shadow = new BitmapDrawable(v.getDrawingCache()); 
    } 

    @Override 
    public void onProvideShadowMetrics (Point size, Point touch){ 
     // Defines local variables 
     int width, height; 
     width = (int)(getView().getWidth() * 1.1); 
     height =(int)(getView().getHeight() * 1.1); 
     shadow.setBounds(0, 0, width, height); 
     size.set(width, height); 
     touch.set(width/2, height/2); 
    } 

    @Override 
    public void onDrawShadow(Canvas canvas) { 
     // Draws the ColorDrawable in the Canvas passed in from the system. 
     shadow.draw(canvas); 
    } 
} 

現在,當我發現不成功的下降,那麼我希望我的觀點得到動畫並返回到它的原始位置。

case DragEvent.ACTION_DRAG_ENDED: 
       if (!event.getResult()) { 
         if (dragged.getTag() == v.getTag()){ 
         int[] location={0,0}; 
         v.getLocationOnScreen(location); 
         Log.v("values::", "x:" + x + " - y:" +x); 
         addViewRemoveViewFromWindow(dragged, location); 
        } 
       } 

       break; 

我能夠在location數組中得到我的視圖的原始位置,即我的結束位置。我想要我在屏幕上拖動視圖(陰影視圖)的位置。但是我無法在任何情況下得到它。試圖在DragEvent.ACTION_DRAG_LOCATION:的情況下得到它,但沒有運氣。它總是返回原始視圖的位置或放下的視圖位置的位置。我想拖動陰影圖像的位置。我想在兩個位置之間的窗口中應用翻譯動畫。在兩個位置之間的窗口中的動畫視圖工作正常,當我嘗試通過使用2個靜態位置。

回答

4

要將您的陰影設置爲初始視圖,您可以使用此代碼段。

private void animateDragToStart(View initialView, float fromX, float fromY) { 
    float topMargin = fromY - initialView.getTop(); 
    float leftMargin = fromX - initialView.getLeft(); 

    Animation translateAnimation = new TranslateAnimation(leftMargin - (initialView.getWidth()/2), 0, topMargin - (initialView.getHeight()/2), 0); 
    translateAnimation.setDuration(500); 
    translateAnimation.setInterpolator(new AccelerateInterpolator()); 
    initialView.startAnimation(translateAnimation); 
    initialView.setVisibility(View.VISIBLE); 
} 

在我來說,我打電話從DROP情況

case DragEvent.ACTION_DROP: 
View initialView = (View) event.getLocalState();//get your initial view 
initialView.setVisibility(View.VISIBLE); 
animateDragToStart(initialView, event.getX(), event.getY()); 

// Returns true. DragEvent.getResult() will return true. 
return true; 

,並在創建陰影時,你應該隱藏原來的視圖方式。

View.DragShadowBuilder shadowBuilder = new MyDragShadowBuilder(view); 
view.startDrag(data, shadowBuilder, view, 0); 
view.setVisibility(View.INVISIBLE); 

問題是舊的,但我回答是因爲可以幫助某人。

+0

謝謝。我會試試.. – Beena