2011-11-11 28 views

Respuesta

6

Aquí está mi código completo de encargo constructor de arrastre sombra (gist for custom drag shadow).

Sin embargo, como otros han dicho que no hay posibilidad de modificar la sombra de arrastrar utilizando la funcionalidad nativa introducida en la API-11.

package com.marcingil.dragshadow; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.view.View; 

public class ImageDragShadowBuilder extends View.DragShadowBuilder { 
    private Drawable shadow; 

    private ImageDragShadowBuilder() { 
     super(); 
    } 

    public static View.DragShadowBuilder fromResource(Context context, int drawableId) { 
     ImageDragShadowBuilder builder = new ImageDragShadowBuilder(); 

     builder.shadow = context.getResources().getDrawable(drawableId); 
     if (builder.shadow == null) { 
      throw new NullPointerException("Drawable from id is null"); 
     } 

     builder.shadow.setBounds(0, 0, builder.shadow.getMinimumWidth(), builder.shadow.getMinimumHeight()); 

     return builder; 
    } 

    public static View.DragShadowBuilder fromBitmap(Context context, Bitmap bmp) { 
     if (bmp == null) { 
      throw new IllegalArgumentException("Bitmap cannot be null"); 
     } 

     ImageDragShadowBuilder builder = new ImageDragShadowBuilder(); 

     builder.shadow = new BitmapDrawable(context.getResources(), bmp); 
     builder.shadow.setBounds(0, 0, builder.shadow.getMinimumWidth(), builder.shadow.getMinimumHeight()); 

     return builder; 
    } 

    @Override 
    public void onDrawShadow(Canvas canvas) { 
     shadow.draw(canvas); 
    } 

    @Override 
    public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) { 
     shadowSize.x = shadow.getMinimumWidth(); 
     shadowSize.y = shadow.getMinimumHeight(); 

     shadowTouchPoint.x = (int)(shadowSize.x/2); 
     shadowTouchPoint.y = (int)(shadowSize.y/2); 
    } 
} 
+0

Marcin, ¿Qué pasa si mi sombra personalizada no es un mapa de bits, sino un diseño? Tengo una pregunta sin respuesta (pequeña recompensa proporcionada) con respecto a dicho escenario: http://stackoverflow.com/questions/22274384/how-to-create-a-custom- drag-shadow –

Cuestiones relacionadas