Android控件拖动效果

图片被拖动的效果
第一步:要自定义两个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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值