最近在忙一些ui特效,心想这个也不是我们开发的事情阿,设计师该管的事情。最近头痛阿,没有办法,还是得慢慢搞,搞开发得有点责任心,对把。这个东西呢,我在国内找了下,说的不是很清楚,大多数说的是利用WindowManager来管理要拖动的ui组件,但是我做了下,感觉麻烦,且不是我想要的效果。难道没有利用父容器来控制ui的拖拽实现吗?答案是有的,找了下资料,发觉效果不错,很有借鉴意义,就分享一下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
复制代码
代码很简单,主要是思路:对你想要拖拽的ui设置一个View.OntouchListener,然后在你想要实现拖拽容器(ViewGroup)里也设置自己的View.OntouchListener.当ui被移动的时候,获得位移数据,然后在包含ui的容器(ViewGroup)里重新设置ui的布局属性即可。代码如下:
package com.android.drag_drop;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
private View selected_item = null;
private int offset_x = 0;
private int offset_y = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup vg = (ViewGroup) findViewById(R.id.vg);
vg.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
int x = (int) event.getX() - offset_x;
int y = (int) event.getY() - offset_y;
int w = getWindowManager().getDefaultDisplay().getWidth() - 100;
int h = getWindowManager().getDefaultDisplay().getHeight() - 100;
if (x > w)
x = w;
if (y > h)
y = h;
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
new ViewGroup.MarginLayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
lp.setMargins(x, y, 0, 0);
selected_item.setLayoutParams(lp);
break;
default:
break;
}
return true;
}
});
ImageView img = (ImageView) findViewById(R.id.img);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
offset_x = (int) event.getX();
offset_y = (int) event.getY();
selected_item = v;
break;
default:
break;
}
return false;
}
});
}
}
复制代码
效果图:


分享到:
相关推荐
在Android平台上,拖放(Drag and Drop)功能是一种常见的用户交互方式,允许用户通过触摸屏幕并移动手指来操作UI元素。在"android-dragAndDrop"项目中,我们看到它是针对Android框架的一个测试实例,专注于实现和...
本压缩包“安卓多点触控手势操作相关-Android简单的拖拽操作DragAndDrop.zip”主要关注的是拖拽操作(DragAndDrop),这是一种常见的单点触控手势,适用于移动元素或数据在界面上的位置。 拖拽操作在Android中是...
在Android系统中,自3.0版本开始引入了一套强大的拖放(Drag & Drop)API,使得开发者可以方便地在应用程序中实现各种交互式的拖放功能。本Demo "DragDropFragDemo3.0" 将展示如何在Android 3.0及更高版本中创建一个...
"flutter_list_drag_and_drop.zip"这个压缩包文件很可能是包含了一个示例项目,用于演示如何在Flutter应用中实现列表项的拖放操作。 首先,我们需要了解Flutter中的`ListView`组件。`ListView`是Flutter中用于展示...
在Android开发中,拖放(Drag & Drop)功能是一种用户友好的交互方式,允许用户通过手势将一个元素从一处移动到另一处。本资源提供的"Drag & Drop source code android"包含了一个实现Android拖放功能的源代码示例,...
1. **拖放操作(Drag & Drop)**:这是Android UI交互的一种方式,允许用户通过触摸屏幕并移动手指来改变屏幕上元素的位置。在Android中,可以通过`View.DragShadowBuilder`创建拖动阴影,使用`onDragListener`监听...
7. **触摸手势识别(Gesture Recognition)**:除了基本的点击事件,Android还支持滑动(Swipe)、拖放(Drag & Drop)等复杂手势。GestureDetector和ScaleGestureDetector等类可以帮助识别这些手势。 8. **控件...
1. **依赖库**:首先,你需要添加AndroidX的`androidx.recyclerview:recyclerview:版本号`和`androidx.core:core-ktx:版本号`库,以及第三方库如`androidx.draganddrop:draganddrop:版本号`,它们提供了拖放的支持。...
此外,如果你希望实现更复杂的拖放功能,如在不同视图之间交换元素,可以使用Android的DragAndDrop API。首先,通过startDrag()方法启动拖放操作,然后实现DragEventListener监听拖放过程: ```java View....
在Android开发中,拖动效果(Drag and Drop)是一种常见的用户交互方式,它可以极大地提升应用的用户体验。本文将深入探讨两种实现Android拖动效果的方法,帮助开发者更好地理解和应用这一技术。 ### 方法一:使用...
Explains new and enhanced features such as drag and drop, fragments, the action bar, enhanced multitouch support, new environmental sensor support, major improvements to the animation framework, and a...
Explains new and enhanced features such as drag and drop, fragments, the action bar, enhanced multitouch support, new environmental sensor support, major improvements to the animation framework, and a...
【Android GridView拖拽实例源码】是一个用于展示Android平台中GridView控件实现拖放功能的实践项目。...同时,这个实例也为你提供了练习Android Drag and Drop API的机会,加深对Android UI交互设计的理解。
Drag and Drop Keyboard and Mouse Input Home Screen App Widgets Adapter-Based App Widgets Content Provider Theory Content Provider Implementation Patterns The Loader Framework The ContactsContract and ...
You can drag and drop UI components onto the canvas and adjust their properties using the attributes panel. 2. **Gradle Build System**: Gradle is a powerful build automation tool that integrates ...
拖放(Drag and Drop, DnD)是Android UI设计中的一项关键功能,它提供了用户与应用之间的直观交互。用户可以通过长按一个对象(通常是视图),然后在屏幕上移动手指来“拖动”该对象,直到找到合适的位置松开手指,...
Drag and Drop Keyboard and Mouse Input Viewing PDFs Home Screen App Widgets Adapter-Based App Widgets Publishing Slices Hosting Slices Advanced Permissions Restricted Profiles and UserManager Device ...
综上所述,创建一个像"cashmoney-android"这样的拖放游戏涉及了Android开发的多个方面,包括XML布局设计、触摸事件处理、Drag and Drop API的使用,以及游戏逻辑和数据管理的实现。每一个环节都需要精心设计和调试,...
在Android平台上,实现拖放(Drag and Drop)功能可以极大地提升用户体验,特别是在构建交互式、动态的应用时。这个名为"Drag"的项目就是一个专注于拖放主题的Android应用程序,旨在展示如何在Android应用中有效地...