图片被拖动的效果
第一步:要自定义两个view控件,一个被拖动的控件AreaOne ,一个被覆盖的控件AreaTwo
第二步:定义界面布局
第三步:代码实现
第二步:定义界面布局
第一步:要自定义两个view控件,一个被拖动的控件AreaOne ,一个被覆盖的控件AreaTwo
第二步:定义界面布局
第三步:代码实现
第一步:要自定义两个view控件,一个被拖动的控件AreaOne ,一个被覆盖的控件AreaTwo
package com.ncsyeyy.YeyyDragging;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by yeyy on 10/22/2015.
*/
public class AreaOne extends View {
public AreaOne(Context context) {
super(context);
}
public AreaOne(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
package com.ncsyeyy.YeyyDragging;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by yeyy on 10/22/2015.
*/
public class AreaTwo extends View {
public AreaTwo(Context context) {
super(context);
}
public AreaTwo(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
第二步:定义界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.ncsyeyy.YeyyDragging.AreaOne
android:id="@+id/viewOne"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#FFFF00"/>
<TextView
android:layout_width="50dp"
android:layout_height="50dp"
/>
<com.ncsyeyy.YeyyDragging.AreaTwo
android:id="@+id/viewTwo"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#00FF00"/>
</LinearLayout>
第三步:代码实现
package com.ncsyeyy.YeyyDragging;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.DragEvent;
import android.view.View;
public class MyActivity extends Activity {
private View viewOne;
private View viewTwo;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
setListener();
}
private void setListener() {
viewOne.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 长按areaOne后开始拖动
viewOne.startDrag(null, new View.DragShadowBuilder(v), (Object) v, 0);
return true;
}
});
viewTwo.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
boolean result = false;
switch (event.getAction()) {
// 开始拖动
case DragEvent.ACTION_DRAG_STARTED: {
Log.e("OnDragListener", "view开始拖动");
result = true;
break;
}
// 被拖动的view进入当前view时被调用
case DragEvent.ACTION_DRAG_ENTERED: {
Log.e("OnDragListener", "被拖动的view进入当前view");
break;
}
// 拖动的view被放入当前view时被回调
case DragEvent.ACTION_DROP: {
Log.e("OnDragListener", "被拖动的view被放入当前view");
View mDragView = (View) event.getLocalState();
// 得到拖动视图的背景
Drawable mDragViewBackground = mDragView.getBackground();
// 设置拖动的view的背景
mDragView.setBackgroundDrawable(v.getBackground());
v.setBackgroundDrawable(mDragViewBackground);
break;
}
// 被拖动的view进入当前view后,位置改变时被回调
case DragEvent.ACTION_DRAG_LOCATION: {
Log.e("OnDragListener", "被拖动的view被放入当前view后,位置发生改变!");
break;
}
// 拖动结束时被回调
case DragEvent.ACTION_DRAG_ENDED: {
Log.e("OnDragListener", "拖动结束!");
// 拖动结束时调用分支
break;
}
// 拖动完成时被回调
case DragEvent.ACTION_DRAG_EXITED: {
Log.e("OnDragListener", "拖动退出!");
// 拖动完成时走入分支
break;
}
default: {
break;
}
}
return result;
}
});
}
private void findView() {
viewOne = findViewById(R.id.viewOne);
viewTwo = findViewById(R.id.viewTwo);
}
}
源码地址:http://download.csdn.net/detail/csdnyuandaimaxuexi/9214477