如何在各自的图像视图中制作正确的图像?

时间:2015-07-20 06:16:04

标签: android android-studio drag-and-drop

这里我想拖放正确的图像,即字母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" />

1 个答案:

答案 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;
    }
};