如何将图像拖放到图像上 [英] how to drag and drop a image onto a image

查看:20
本文介绍了如何将图像拖放到图像上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,明天(英国)祝大家圣诞快乐,我对 android 还很陌生,但已经成功管理了一些零碎的东西,我现在试图实现的是一个简单的拖放活动,它允许用户将形状 ImageView 拖放到另一个 ImageView 上,如果图像匹配,则它应该替换它重叠的图像,如果它不应该恢复到原来的位置,我知道这意味着在我的 drop 事件中创建一个 if/else 块但是在浏览了几个教程之后,我无法拼凑出我想要的东西,而且我目前没有足够的 Java 知识来完成这个任务,目前我有一个包含 6 个图像视图的布局,3 个是静态的,另外 3 个可以移动屏幕并放置在布局上而不是图像视图上,我认为这是因为我将 Draglistener 设计为我的布局而不是我的图像视图,但我有点迷路,有人可以帮助我吗?感谢您的任何和所有建议.这是我的代码

hello and merry Christmas to everyone for tomorrow(UK), I'm rather new to android but have successfully managed a few bits and pieces what im trying to achieve right now is a simple drag and drop activity that allows the user to drag and drop a shape ImageView onto another ImageView, if the image matches then it should replace the image it overlapped, and if it doesnt it should snap back to where it was, i know this means creating an if/else block in my drop event but after thumbing few many tutorials i couldn't piece together what i wanted and i dont currently have enough java knowledge to pull this off currently i have a layout which holds 6 image views, 3 are static and the other 3 can be moved on the screen and placed on the layout but not on the imageviews, i think this is because ive deisgned the draglistener to my layout and not to my imageviews but im a little lost, can somebody help me? thank you for any and all suggestions. here is my code

DragandDrop.java    

import android.os.Bundle;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.DragShadowBuilder;
import android.view.View.OnDragListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.app.Activity;

public class DragandDrop extends Activity implements OnTouchListener, OnDragListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.draganddrop);
    findViewById(R.id.squareImage).setOnTouchListener(this);
    findViewById(R.id.circleImage).setOnTouchListener(this);
    findViewById(R.id.triangleImage).setOnTouchListener(this);
    findViewById(R.id.top_container).setOnDragListener(this);
    findViewById(R.id.bottom_container).setOnDragListener(this);
    findViewById(R.id.squareImage1).setOnDragListener(this);
    findViewById(R.id.circleImage1).setOnDragListener(this);
    findViewById(R.id.triangleImage1).setOnDragListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent e) {
    if (e.getAction() == MotionEvent.ACTION_DOWN) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
        v.startDrag(null, shadowBuilder, v, 0);
        v.setVisibility(View.INVISIBLE);
        return true;
    } else {
        return false;
    }
}

@Override
public boolean onDrag(View v, DragEvent e) {
    if (e.getAction()==DragEvent.ACTION_DROP) {
        View view = (View) e.getLocalState();
        ViewGroup from = (ViewGroup) view.getParent();
        from.removeView(view);
        LinearLayout to = (LinearLayout) v;
        to.addView(view);
        view.setVisibility(View.VISIBLE);
    }
    return true;
}

}

拖放.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".draganddrop"
android:background="@drawable/dragshapes"
android:orientation="vertical"
android:id="@+id/dropLayout">


<LinearLayout
    android:id="@+id/top_container"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@android:color/transparent"
    android:orientation="horizontal"
    android:gravity="center">

    <ImageView
        android:contentDescription="@string/square_text_content"
        android:id="@+id/squareImage1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragsquare1" />

    <ImageView
        android:contentDescription="@string/circle_text_content"
        android:id="@+id/circleImage1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragcircle1" />

    <ImageView
        android:contentDescription="@string/triangle_text_content"
        android:id="@+id/triangleImage1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragtriangle1" />



</LinearLayout>

<LinearLayout
    android:id="@+id/bottom_container"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@android:color/transparent"
    android:orientation="horizontal"
    android:gravity="center">
    <ImageView
        android:contentDescription="@string/square_text_content"
        android:id="@+id/squareImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragsquare" />

    <ImageView
        android:contentDescription="@string/circle_text_content"
        android:id="@+id/circleImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragcircle" />

    <ImageView
        android:contentDescription="@string/triangle_text_content"
        android:id="@+id/triangleImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragtriangle" />

</LinearLayout>

</LinearLayout>

推荐答案

移除容器的设置拖拽监听器

Remove setting drag listeners for the containers

  findViewById(R.id.top_container).setOnDragListener(this);//remove this
    findViewById(R.id.bottom_container).setOnDragListener(this);//remove this

检查拖动的图像视图是否与您放置的视图匹配.如果它们匹配,请将放置的图像视图的背景设置为拖动的视图.(其他尺寸与您的 xml 文件相同)示例代码-

Check whether the dragged image view matches with your dropped view.If they are matching set the dropped image view's background to that of the dragged one.(Other dimensions are same as per your xml file) sample code-

        @Override
           public boolean onDrag(View v, DragEvent e) {
        if (e.getAction()==DragEvent.ACTION_DROP) {
            View view = (View) e.getLocalState();
    if(view.getId()==R.id.squareImage1 && v.getId()==R.id.squareImage)
    {
     ViewGroup from = (ViewGroup) view.getParent();
            from.removeView(view);
    v.setBackground(@drawable/dragsquare1);//TODO: change this pseudo code.
    return true;
    } else if(view.getId()==R.id.circleImage1 && v.getId()==R.id.circleImage){
     ViewGroup from = (ViewGroup) view.getParent();
            from.removeView(view);
    v.setBackground(@drawable/dragcircle1);//TODO: change this pseudo code.
    return true;
    } else if(view.getId()==R.id.triangleImage1 && v.getId()==R.id.triangleImage){
     ViewGroup from = (ViewGroup) view.getParent();
            from.removeView(view);
    v.setBackground(@drawable/dragtriangle1);//TODO: change this pseudo code.
    return true;
    } else {
return false;
}

        }

}

希望这对你有帮助..圣诞快乐

Hope this helps you..merry christmas

这篇关于如何将图像拖放到图像上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆