这里我想拖放正确的图像,即字母A从左侧到右侧的图像,并将分数设置为1.但是在编写下面的代码后,所有图像在掉到视图外时都会消失。而且所有图像都会使得分与正确的分数一起上升。任何人都可以帮助我吗?
我的Gameactivity代码:
img1 = (ImageView) findViewById(R.id.ic_one);
img2 = (ImageView) findViewById(R.id.ic_two);
img3 = (ImageView) findViewById(R.id.ic_three);
img4 = (ImageView) findViewById(R.id.ic_four);
imgmain = (ImageView) findViewById(R.id.ic_main);
img1.setImageResource(R.mipmap.a1);
img2.setImageResource(R.mipmap.a2);
img3.setImageResource(R.mipmap.a3);
img4.setImageResource(R.mipmap.a4);
imgmain.setImageResource(R.mipmap.a1);
//setting touch listener
img1.setOnTouchListener(listenTouch);
img2.setOnTouchListener(listenTouch);
img3.setOnTouchListener(listenTouch);
img4.setOnTouchListener(listenTouch);
imgmain.setOnDragListener(listenDrag);
display = (TextView) findViewById(R.id.txtScore);
}
public View.OnTouchListener listenTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//setup drag
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
v.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
};
public View.OnDragListener listenDrag = new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
case DragEvent.ACTION_DRAG_ENTERED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_EXITED:
//no action necessary
break;
case DragEvent.ACTION_DROP:
//handle the dragged view being dropped over a drop view
if(v.getId() == R.id.ic_main) {
View view = (View) event.getLocalState();
ViewGroup viewgroup = (ViewGroup) view.getParent();
viewgroup.removeView(view);
//change the text
score++;
display.setText("Your score is : "+score);
view.setVisibility(View.VISIBLE);
} else {
View view = (View) event.getLocalState();
view.setVisibility(View.VISIBLE);
Context context = getApplicationContext();
Toast.makeText(context, "You can't drop the image here",
Toast.LENGTH_LONG).show();
break;
}
break;
case DragEvent.ACTION_DRAG_ENDED:
//no action necessary
break;
default:
break;
}
return true;
}
};
}
我的布局代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.bhuwan.firstproject.GameActivity"
android:id="@+id/layout_game">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/ic_main"
android:layout_alignBottom="@+id/ic_two"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="36dp" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/ic_one"
android:layout_alignParentTop="true" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/ic_two"
android:layout_marginTop="143dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/ic_three"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/ic_one"
android:layout_toEndOf="@+id/ic_one" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/ic_four"
android:layout_alignTop="@+id/ic_two"
android:layout_toRightOf="@+id/ic_two"
android:layout_toEndOf="@+id/ic_two" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/empty"
android:id="@+id/txtScore"
android:layout_marginBottom="60dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="42dp"
android:layout_marginStart="42dp" />
答案 0 :(得分:0)
你的逻辑存在一些问题。我做了一些改变。试着告诉我它是否更好:
img1 = (ImageView) findViewById(R.id.ic_one);
img2 = (ImageView) findViewById(R.id.ic_two);
img3 = (ImageView) findViewById(R.id.ic_three);
img4 = (ImageView) findViewById(R.id.ic_four);
imgmain = (ImageView) findViewById(R.id.ic_main);
img1.setImageResource(R.mipmap.a1);
img2.setImageResource(R.mipmap.a2);
img3.setImageResource(R.mipmap.a3);
img4.setImageResource(R.mipmap.a4);
imgmain.setImageResource(R.mipmap.a1);
//setting touch listener
img1.setOnTouchListener(listenTouch);
img2.setOnTouchListener(listenTouch);
img3.setOnTouchListener(listenTouch);
img4.setOnTouchListener(listenTouch);
imgmain.setOnDragListener(listenDrag);
display = (TextView) findViewById(R.id.txtScore);
}
public View.OnTouchListener listenTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//setup drag
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
v.setVisibility(View.INVISIBLE);
img1.setOnTouchListener(null);
img2.setOnTouchListener(null);
img3.setOnTouchListener(null);
img4.setOnTouchListener(null);
}
return false;
}
};
public View.OnDragListener listenDrag = new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
case DragEvent.ACTION_DRAG_ENTERED:
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DRAG_ENDED:
img1.setOnTouchListener(listenDrag);
img2.setOnTouchListener(listenDrag);
img3.setOnTouchListener(listenDrag);
img4.setOnTouchListener(listenDrag);
View view = (View) event.getLocalState();
view.setVisibility(View.VISIBLE);
if (!getResoult()) {
Context context = getApplicationContext();
Toast.makeText(context, "You can't drop the image here", Toast.LENGTH_LONG).show();
}
break;
case DragEvent.ACTION_DROP:
//handle the dragged view being dropped over a drop view
View viewCorrect = (View) event.getLocalState();
ViewGroup viewgroup = (ViewGroup) viewCorrect.getParent();
viewgroup.removeView(viewCorrect);
//change the text
score++;
display.setText("Your score is : "+score);
break;
}
return true;
}
};