作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 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 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();
}
}}
关于java - 如何在android中检查拖放是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37480259/
我是一名优秀的程序员,十分优秀!