Java 如何在android中检查拖放是否为空

Java 如何在android中检查拖放是否为空,java,android,drag-and-drop,drag,onlongclicklistener,Java,Android,Drag And Drop,Drag,Onlongclicklistener,我是android新手。现在我用三个按钮创建拖放功能。我检查了拖动按钮不应该为空,因为我必须从该按钮获取数据,而拖放按钮应该为空 如何将按钮移动到仅靠近按钮的位置?如果b1、b2、b3水平存在,则表示b1必须移动b2,但可以移动两侧,b3只能移动b2一侧。我的代码在这里。请指导我 import android.content.ClipData; import android.graphics.Canvas; import android.graphics.Point; import androi

我是android新手。现在我用三个按钮创建拖放功能。我检查了拖动按钮不应该为空,因为我必须从该按钮获取数据,而拖放按钮应该为空

如何将按钮移动到仅靠近按钮的位置?如果b1、b2、b3水平存在,则表示b1必须移动b2,但可以移动两侧,b3只能移动b2一侧。我的代码在这里。请指导我

import android.content.ClipData;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.DragEvent;
import android.view.View;
import android.view.View.OnDragListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button b1,b2,b3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = (Button) findViewById(R.id.b1);
        b2 = (Button) findViewById(R.id.b2);
        b3 = (Button) findViewById(R.id.b3);
        findViewById(R.id.b1).setOnLongClickListener(longClickListener);
        findViewById(R.id.b2).setOnLongClickListener(longClickListener);
        findViewById(R.id.b3).setOnLongClickListener(longClickListener);
        findViewById(R.id.b1).setOnDragListener(dragListener);
        findViewById(R.id.b2).setOnDragListener(dragListener);
        findViewById(R.id.b3).setOnDragListener(dragListener);
    }
    OnLongClickListener longClickListener = new OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            DragShadow dragShadow = new DragShadow(view);

            ClipData clipData = ClipData.newPlainText("","");

            view.startDrag(clipData, dragShadow, view, 0);

            return true;
        }
    };
    private class DragShadow extends View.DragShadowBuilder{

        ColorDrawable greyBox;

        public DragShadow(View v){
            super(v);
            greyBox = new ColorDrawable(R.color.button_material_light);
        }

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

        @Override
        public void onProvideShadowMetrics(Point shadowSize, Point  
        shadowTouchPoint) {
            View v = getView();

            int height = (int) v.getHeight();
            int width = (int) v.getWidth();

            greyBox.setBounds(0,0,width,height);

            shadowSize.set(width,height);

            shadowTouchPoint.set((int) width/2,(int) height/2);
        }
    }
    OnDragListener dragListener = new OnDragListener() {
        @Override
        public boolean onDrag(View view, DragEvent dragEvent) {

            int dEvent = dragEvent.getAction();

            switch (dEvent) {
                case DragEvent.ACTION_DRAG_ENTERED:
                    Log.i("Drag Event", "Entered");
                    break;

                case DragEvent.ACTION_DRAG_EXITED:
                    Log.i("Drag Event", "Exited");
                    break;

                case DragEvent.ACTION_DROP:
                    Button b = (Button) view;
                if (b.getText().toString().matches("")) {
                    Button dragged = (Button) dragEvent.getLocalState();
                    CharSequence a = b.getText();
                    b.setText(dragged.getText());
                    dragged.setText(a);
                } else{
                    Toast.makeText(getApplicationContext(),"inserting button should be empty",Toast.LENGTH_SHORT).show();
                }
                    break;
            }
            return true;
        }
   };
}

最后,我找到了一种解决问题的方法,这对我很有好处:)

public类MainActivity扩展了AppCompatActivity{
按钮b1、b2、b3、b4、b5、b6、b7、b8、b9,按钮,拖动;
线性布局;
int move=0,moveleft=30;
文本视图m,ml;
公共无效播放(视图){
布局.设置可见性(视图.可见);
按钮。设置可见性(视图。不可见);
ArrayList编号=新的ArrayList();
Random randomGenerator=新的Random();
while(number.size()<8){
int random=randomGenerator.nextInt(8)+1;
如果(!number.contains(随机)){
数字。添加(随机);
}
}
b1.setText(Integer.toString(numbers.get(0));
b2.setText(Integer.toString(numbers.get(1));
b3.setText(Integer.toString(numbers.get(2));
b4.setText(Integer.toString(numbers.get(3));
b5.setText(Integer.toString(numbers.get(4));
setText(Integer.toString(numbers.get(5));
setText(Integer.toString(numbers.get(6));
setText(Integer.toString(numbers.get(7));
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
布局=(线性布局)findViewById(R.id.li);
b1=(按钮)findViewById(R.id.b1);
b2=(按钮)findViewById(R.id.b2);
b3=(按钮)findViewById(R.id.b3);
b4=(按钮)findViewById(R.id.b4);
b5=(按钮)findViewById(R.id.b5);
b6=(按钮)findViewById(R.id.b6);
b7=(按钮)findViewById(R.id.b7);
b8=(按钮)findViewById(R.id.b8);
b9=(按钮)findViewById(R.id.b9);
按钮=(按钮)findViewById(R.id.button);
m=(TextView)findViewById(R.id.move);
ml=(TextView)findViewById(R.id.mleft);
b1.setOnTouchListener(longClickListener);
b2.setOnTouchListener(longClickListener);
b3.setOnTouchListener(longClickListener);
b4.setOnTouchListener(longClickListener);
b5.setOnTouchListener(longClickListener);
b6.setOnTouchListener(longClickListener);
b7.setOnTouchListener(longClickListener);
b8.setOnTouchListener(longClickListener);
b9.setOnTouchListener(longClickListener);
}
OnTouchListener longClickListener=新建OnTouchListener(){
@凌驾
公共布尔onTouch(最终视图,MotionEvent){
DragShadow DragShadow=新的DragShadow(视图);
ClipData ClipData=ClipData.newPlainText(“,”);
view.startDrag(clipData,dragShadow,view,0);
Log.i(“info”,view.getTag().toString());
Log.i(“info”,b1.getTag().toString());
if(view.getTag().toString().matches(b1.getTag().toString())){
b2.setOnDragListener(dragListener);
b4.setOnDragListener(dragListener);
b1.setOnDragListener(空);
b3.setOnDragListener(空);
b5.setOnDragListener(空);
b6.setOnDragListener(空);
b7.setOnDragListener(空);
b8.setOnDragListener(空);
b9.setOnDragListener(空);
}else如果(view.getTag().toString().matches(b2.getTag().toString())){
b1.setOnDragListener(dragListener);
b3.setOnDragListener(dragListener);
b5.塞通特拉格监听器(dragListener);
b2.setOnDragListener(空);
b4.setOnDragListener(空);
b6.setOnDragListener(空);
b7.setOnDragListener(空);
b8.setOnDragListener(空);
b9.setOnDragListener(空);
}else如果(view.getTag().toString().matches(b3.getTag().toString())){
b2.setOnDragListener(dragListener);
b6.setOnDragListener(dragListener);
b1.setOnDragListener(空);
b3.setOnDragListener(空);
b4.setOnDragListener(空);
b5.setOnDragListener(空);
b7.setOnDragListener(空);
b8.setOnDragListener(空);
b9.setOnDragListener(空);
}else if(view.getTag().toString().matches(b4.getTag().toString())){
b1.setOnDragListener(dragListener);
b5.塞通特拉格监听器(dragListener);
b7.setOnDragListener(dragListener);
b2.setOnDragListener(空);
b3.setOnDragListener(空);
b4.setOnDragListener(空);
b6.setOnDragListener(空);
b8.setOnDragListener(空);
b9.setOnDragListener(空);
}else if(view.getTag().toString().matches(b5.getTag().toString())){
b2.setOnDragListener(dragListener);
b4.setOnDragListener(dragListener);
b6.setOnDragListener(dragListener);
b8.setOnDragListener(dragListener);
b1.setOnDragListener(空);
b3.setOnDragListener(空);
b5.setOnDragListener(空);
b7.setOnDragListener(空);
b9.setOnDragListener(空);
}else if(view.getTag().toString().matches(b6.getTag().toString())){
b3.setOnDragListener(dragListener);
b5.塞通特拉格监听器(dragListener);
b9.setOnDragListener(dragListener);
b1.setOnDragListener(空);
b2.setOnDragListener(空);
b4.setOnDragListener(空);
b6.setOnDragListener(空);
public class MainActivity extends AppCompatActivity {
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,button,dragged;
LinearLayout layout;
int move=0,moveleft=30;
TextView m,ml;

public void play(View view){
    layout.setVisibility(View.VISIBLE);
    button.setVisibility(View.INVISIBLE);


    ArrayList<Integer> numbers = new ArrayList<Integer>();
    Random randomGenerator = new Random();
    while (numbers.size() < 8) {

        int random = randomGenerator .nextInt(8)+1;
        if (!numbers.contains(random)) {
            numbers.add(random);
        }
    }
    b1.setText(Integer.toString(numbers.get(0)));
    b2.setText(Integer.toString(numbers.get(1)));
    b3.setText(Integer.toString(numbers.get(2)));
    b4.setText(Integer.toString(numbers.get(3)));
    b5.setText(Integer.toString(numbers.get(4)));
    b6.setText(Integer.toString(numbers.get(5)));
    b7.setText(Integer.toString(numbers.get(6)));
    b8.setText(Integer.toString(numbers.get(7)));
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    layout = (LinearLayout) findViewById(R.id.li);

    b1 = (Button) findViewById(R.id.b1);
    b2 = (Button) findViewById(R.id.b2);
    b3 = (Button) findViewById(R.id.b3);
    b4 = (Button) findViewById(R.id.b4);
    b5 = (Button) findViewById(R.id.b5);
    b6 = (Button) findViewById(R.id.b6);
    b7 = (Button) findViewById(R.id.b7);
    b8 = (Button) findViewById(R.id.b8);
    b9 = (Button) findViewById(R.id.b9);
    button = (Button) findViewById(R.id.button);
    m = (TextView) findViewById(R.id.move);
    ml = (TextView) findViewById(R.id.mleft);


    b1.setOnTouchListener(longClickListener);
    b2.setOnTouchListener(longClickListener);
    b3.setOnTouchListener(longClickListener);
    b4.setOnTouchListener(longClickListener);
    b5.setOnTouchListener(longClickListener);
    b6.setOnTouchListener(longClickListener);
    b7.setOnTouchListener(longClickListener);
    b8.setOnTouchListener(longClickListener);
    b9.setOnTouchListener(longClickListener);



}

OnTouchListener longClickListener =new OnTouchListener() {
    @Override
    public boolean onTouch(final View view, MotionEvent motionEvent) {

            DragShadow dragShadow = new DragShadow(view);

            ClipData clipData = ClipData.newPlainText("", "");
            view.startDrag(clipData, dragShadow, view, 0);

            Log.i("info", view.getTag().toString());
            Log.i("info", b1.getTag().toString());

            if (view.getTag().toString().matches(b1.getTag().toString())) {
                b2.setOnDragListener(dragListener);
                b4.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b3.setOnDragListener(null);
                b5.setOnDragListener(null);
                b6.setOnDragListener(null);
                b7.setOnDragListener(null);
                b8.setOnDragListener(null);
                b9.setOnDragListener(null);

            } else if (view.getTag().toString().matches(b2.getTag().toString())) {
                b1.setOnDragListener(dragListener);
                b3.setOnDragListener(dragListener);
                b5.setOnDragListener(dragListener);
                b2.setOnDragListener(null);
                b4.setOnDragListener(null);
                b6.setOnDragListener(null);
                b7.setOnDragListener(null);
                b8.setOnDragListener(null);
                b9.setOnDragListener(null);

            } else if (view.getTag().toString().matches(b3.getTag().toString())) {
                b2.setOnDragListener(dragListener);
                b6.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b3.setOnDragListener(null);
                b4.setOnDragListener(null);
                b5.setOnDragListener(null);
                b7.setOnDragListener(null);
                b8.setOnDragListener(null);
                b9.setOnDragListener(null);


            } else if (view.getTag().toString().matches(b4.getTag().toString())) {
                b1.setOnDragListener(dragListener);
                b5.setOnDragListener(dragListener);
                b7.setOnDragListener(dragListener);
                b2.setOnDragListener(null);
                b3.setOnDragListener(null);
                b4.setOnDragListener(null);
                b6.setOnDragListener(null);
                b8.setOnDragListener(null);
                b9.setOnDragListener(null);

            } else if (view.getTag().toString().matches(b5.getTag().toString())) {
                b2.setOnDragListener(dragListener);
                b4.setOnDragListener(dragListener);
                b6.setOnDragListener(dragListener);
                b8.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b3.setOnDragListener(null);
                b5.setOnDragListener(null);
                b7.setOnDragListener(null);
                b9.setOnDragListener(null);

            } else if (view.getTag().toString().matches(b6.getTag().toString())) {
                b3.setOnDragListener(dragListener);
                b5.setOnDragListener(dragListener);
                b9.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b2.setOnDragListener(null);
                b4.setOnDragListener(null);
                b6.setOnDragListener(null);
                b7.setOnDragListener(null);
                b8.setOnDragListener(null);

            } else if (view.getTag().toString().matches(b7.getTag().toString())) {
                b4.setOnDragListener(dragListener);
                b8.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b2.setOnDragListener(null);
                b3.setOnDragListener(null);
                b5.setOnDragListener(null);
                b6.setOnDragListener(null);
                b7.setOnDragListener(null);
                b9.setOnDragListener(null);
            } else if (view.getTag().toString().matches(b8.getTag().toString())) {
                b7.setOnDragListener(dragListener);
                b5.setOnDragListener(dragListener);
                b9.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b2.setOnDragListener(null);
                b3.setOnDragListener(null);
                b4.setOnDragListener(null);
                b6.setOnDragListener(null);
                b8.setOnDragListener(null);
            } else if (view.getTag().toString().matches(b9.getTag().toString())) {
                b6.setOnDragListener(dragListener);
                b8.setOnDragListener(dragListener);
                b1.setOnDragListener(null);
                b2.setOnDragListener(null);
                b3.setOnDragListener(null);
                b4.setOnDragListener(null);
                b5.setOnDragListener(null);
                b7.setOnDragListener(null);
                b9.setOnDragListener(null);

            }
            return true;
        }


};

private class DragShadow extends View.DragShadowBuilder{

    ColorDrawable greyBox;


    @SuppressWarnings("ResourceAsColor")
    public DragShadow(View v){
        super(v);
        greyBox = new ColorDrawable(R.color.colorPrimaryDark);
    }

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

    @Override
    public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {

        View v = getView();

        int height = (int) v.getHeight();
        int width = (int) v.getWidth();

        greyBox.setBounds(0,0,width,height);

        shadowSize.set(width,height);

        shadowTouchPoint.set((int) width/2,(int) height/2);
    }
}
OnDragListener dragListener = new OnDragListener() {
    @Override
    public boolean onDrag(View view, DragEvent dragEvent) {

        int dEvent = dragEvent.getAction();

        switch (dEvent) {
            case DragEvent.ACTION_DRAG_ENTERED:
                Log.i("Drag Event", "Entered");
                break;

            case DragEvent.ACTION_DRAG_EXITED:
                Log.i("Drag Event", "Exited");
                break;

            case DragEvent.ACTION_DROP:


                Button b = (Button) view;


                if (b.getText().toString().matches("")) {
                    dragged = (Button) dragEvent.getLocalState();
                    CharSequence a = b.getText();
                    b.setText(dragged.getText());
                    dragged.setText(a);
                    move++;
                    moveleft--;
                    m.setText(Integer.toString(move));
                    ml.setText(Integer.toString(moveleft));
                    condition();
                } else{
                    Toast.makeText(getApplicationContext(),"inserting button should be empty",Toast.LENGTH_SHORT).show();
                }
                break;
        }
        return true;
    }
};

public void condition(){

if(b1.getText().toString().matches("1")
        &&b2.getText().toString().matches("2")
        &&b3.getText().toString().matches("3")
        &&b4.getText().toString().matches("4")
        &&b5.getText().toString().matches("5")
        &&b6.getText().toString().matches("6")
        &&b7.getText().toString().matches("7")
        &&b8.getText().toString().matches("8")){

    Toast toast = Toast.makeText(getApplicationContext(),"GAME OVER",Toast.LENGTH_LONG);
    ViewGroup group = (ViewGroup) toast.getView();
    TextView messageTextView = (TextView) group.getChildAt(0);
    messageTextView.setTextSize(25);
    toast.show();
}

}}