拖放透明面板Android

时间:2011-11-04 03:06:37

标签: android

我正在实现拖放方法。 我试图将图像从透明面板拖到拖动图层视图中,但它会抛出错误并强制关闭。

来自logcat的错误说:给定视图不是com.example.drag.DragLayer的子代。

xml使用DragLayer类。 怎么了?以及如何解决?

以下是代码:     “XML”     

<com.example.drag.DragLayer
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"

android:id="@+id/drag_layer"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.example.drag.TransparentPanel
android:id="@+id/popup_window"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="left"
android:padding="1px"
android:background="#ffffff">

<ScrollView android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:id="@+id/LinearLayout02"
android:layout_width="wrap_content"
android:layout_height="30px"
android:orientation="vertical">
<TextView
 android:id="@+id/Text1"  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello"
/>
<ImageView
android:id="@+id/Image1"
android:src="@drawable/icon1"
android:layout_weight="50" 
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/Image2"
android:src="@drawable/icon2"
android:layout_weight="50" 
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>
</ScrollView>
</com.example.drag.TransparentPanel>
</com.example.drag.DragLayer>

以下是代码:“DragLayer.java”

public class DragLayer extends MyAbsoluteLayout 
implements DragSource, DropTarget
{
DragController mDragController;

   public DragLayer (Context context, AttributeSet attrs) {
    super(context, attrs);
}

public void setDragController(DragController controller) {
    mDragController = controller;
}

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    return mDragController.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    return mDragController.onInterceptTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    return mDragController.onTouchEvent(ev);
}

@Override
public boolean dispatchUnhandledMove(View focused, int direction) {
    return mDragController.dispatchUnhandledMove(focused, direction);
}

public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset,
    DragView dragView, Object dragInfo)
{
View v = (View) dragInfo;
toast ("DragLayer2.onDrop accepts view: " + v.getId ()
      + "x, y, xO, yO :" + new Integer (x) + ", " + new Integer (y) + ", "
      + new Integer (xOffset) + ", " + new Integer (yOffset));

int w = v.getWidth ();
int h = v.getHeight ();
int left = x - xOffset;
int top = y - yOffset;
DragLayer.LayoutParams lp = new DragLayer.LayoutParams (w, h, left, top);
this.updateViewLayout(v, lp);
}

public void onDragEnter(DragSource source, int x, int y, int xOffset, int yOffset,
    DragView dragView, Object dragInfo)
{
}

public void onDragOver(DragSource source, int x, int y, int xOffset, int yOffset,
    DragView dragView, Object dragInfo)
{
}

 public void onDragExit(DragSource source, int x, int y, int xOffset, int yOffset,
    DragView dragView, Object dragInfo)
{
}

public boolean acceptDrop(DragSource source, int x, int y, int xOffset, int yOffset,
    DragView dragView, Object dragInfo)
{
return true;
}

 public Rect estimateDropLocation(DragSource source, int x, int y, int xOffset, int  

  yOffset,
        DragView dragView, Object dragInfo, Rect recycle)
 {
return null;
}

public void toast (String msg)
{
if (!DragActivity.Debugging) return;
Toast.makeText (getContext (), msg, Toast.LENGTH_SHORT).show ();
} // end toast


} // end class

1 个答案:

答案 0 :(得分:0)

不确定为什么使用Java的Drag Drop API。 请使用特定于Android的拖放apis Drag and Drop Dev Guide