How to drag and drop an ImageView onto another ImageView?(如何将一个ImageView拖放到另一个ImageView上?)
本文介绍了如何将一个ImageView拖放到另一个ImageView上?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对Android相当陌生,但已经成功地掌握了一些零碎的东西。
我现在尝试实现的是一个简单的拖放活动,它允许用户:
- 将一个形状&q;ImageView&q;拖放到另一个形状&q;ImageView&q;上。
- 如果镜像:
匹配-它应该替换拖放到其上的图像,
如果不是,它应该会迅速恢复到原来的位置。
我知道这意味着在我的Drop活动中创建一个如果/否则挡路,但在浏览了几个很多教程之后,我无法拼凑出我需要的东西。我目前没有足够的Java知识来完成这项工作。
目前我的布局包含6个ImageViews,其中3个是静电,3个可以在屏幕上移动并放置在布局上,但不能放在ImageViews上。
我想这是因为我按照我的布局而不是ImageViews设计了DragListener,但是我有点迷路了,有人能帮我吗?
以下是我的代码:
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;
}
}
draganddrop.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>
推荐答案
删除容器的设置拖动侦听器
findViewById(R.id.top_container).setOnDragListener(this); //Remove this
findViewById(R.id.bottom_container).setOnDragListener(this); //Remove this
- 检查拖放的图像视图是否与拖放的视图匹配。
如果它们匹配:- 将拖放的ImageView的背景设置为拖放的背景。
(其他维度与您的XML文件相同)
- 将拖放的ImageView的背景设置为拖放的背景。
示例代码:
@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;
}
}
}
希望这能帮助您.
圣诞快乐
这篇关于如何将一个ImageView拖放到另一个ImageView上?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何将一个ImageView拖放到另一个ImageView上?
基础教程推荐
猜你喜欢
- Android:对话框关闭而不调用关闭 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01