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 - 拆分 Drawable 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01