- 浏览: 5818537 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
来自老外:
拖拽图片效果
方法一:
方法二:
拖动按钮到处跑
1. 布局文件
2. 代码
另一种:
再一个,浮动按钮的实现。
主要功能:
点击按钮可以进行拖动;
当点击按钮时按钮会出现于所有按钮的最上方;
import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.os.Bundle; import android.view.MotionEvent ; import android.widget.AbsoluteLayout; import android.widget.Button; public class Drag_And_Drop extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); MyView tx = new MyView(this); tx.setText("Drag Me"); AbsoluteLayout l = new AbsoluteLayout(this); AbsoluteLayout.LayoutParams p = new AbsoluteLayout.LayoutParams( AbsoluteLayout.LayoutParams.WRAP_CONTENT, AbsoluteLayout.LayoutParams.WRAP_CONTENT,10,10); l.addView(tx,p); setContentView(l); } } class MyView extends Button{ public MyView(Context c){ super(c); } @Override public boolean onMotionEvent(MotionEvent event) { int action = event.getAction(); int mCurX = (int)event.getX(); int mCurY = (int)event.getY(); if ( action == MotionEvent.ACTION_MOVE ) { //this.setText("x: " + mCurX + ",y: " + mCurY ); AbsoluteLayout.LayoutParams p = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT, AbsoluteLayout.LayoutParams.WRAP_CONTENT,this.mLeft + mCurX,this.mTop + mCurY); this.setLayoutParams (p); } if ( action == MotionEvent.ACTION_UP ) { //this.setText("not moving"); } return true; } @Override public void draw(Canvas canvas) { // TODO Auto-generated method stub super.draw(canvas); } }
拖拽图片效果
方法一:
import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class DragSample01 extends Activity { ImageView img; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drag_sample01); img = (ImageView)findViewById(R.id.img_view); img.setOnTouchListener(new OnTouchListener(){ private int mx, my; public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_MOVE: mx = (int)(event.getRawX()); my = (int)(event.getRawY() - 50); v.layout(mx - img.getWidth()/2, my - img.getHeight()/2, mx + img.getWidth()/2, my + img.getHeight()/2); break; } return true; }}); } }
方法二:
import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class DragSample01 extends Activity { ImageView img; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drag_sample01); img = (ImageView)findViewById(R.id.img_view); img.setOnTouchListener(new OnTouchListener(){ private float x, y; private int mx, my; public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: x = event.getX(); y = event.getY(); case MotionEvent.ACTION_MOVE: mx = (int)(event.getRawX() - x); my = (int)(event.getRawY() - 50 - y); v.layout(mx, my, mx + v.getWidth(), my + v.getHeight()); break; } return true; }}); } }
拖动按钮到处跑
1. 布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="拖动看看~~" /> </LinearLayout>
2. 代码
import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.Button; public class DraftTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn = (Button) findViewById(R.id.btn); btn.setOnTouchListener(new OnTouchListener() { int[] temp = new int[] { 0, 0 }; public boolean onTouch(View v, MotionEvent event) { int eventaction = event.getAction(); int x = (int) event.getRawX(); int y = (int) event.getRawY(); switch (eventaction) { case MotionEvent.ACTION_DOWN: // touch down so check if the temp[0] = (int) event.getX(); temp[1] = y - v.getTop(); break; case MotionEvent.ACTION_MOVE: // touch drag with the ball v.layout(x - temp[0], y - temp[1], x + v.getWidth() - temp[0], y - temp[1] + v.getHeight()); // v.postInvalidate(); break; case MotionEvent.ACTION_UP: break; } return false; } }); } }
另一种:
import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.Button; public class DraftTest extends Activity { /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DisplayMetrics dm = getResources().getDisplayMetrics(); final int screenWidth = dm.widthPixels; final int screenHeight = dm.heightPixels - 50; final Button b = (Button) findViewById(R.id.btn); b.setOnTouchListener(new OnTouchListener() { int lastX, lastY; public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = v.getLeft() + dx; int top = v.getTop() + dy; int right = v.getRight() + dx; int bottom = v.getBottom() + dy; if (left < 0) { left = 0; right = left + v.getWidth(); } if (right > screenWidth) { right = screenWidth; left = right - v.getWidth(); } if (top < 0) { top = 0; bottom = top + v.getHeight(); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.getHeight(); } v.layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: break; } return false; } }); } }
再一个,浮动按钮的实现。
主要功能:
点击按钮可以进行拖动;
当点击按钮时按钮会出现于所有按钮的最上方;
import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.style.AbsoluteSizeSpan; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.AbsoluteLayout; import android.widget.Button; public class HelloWorld2 extends Activity { /** Called when the activity is first created. */ AbsoluteLayout mLayoutGroup = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); mLayoutGroup = new AbsoluteLayout(this); AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams (320, 480, 0, 0); setContentView(mLayoutGroup, layoutParams); Button button= new Button(this); button.setText("testButton"); layoutParams = new AbsoluteLayout.LayoutParams(120, 60, 20, 20); mLayoutGroup.addView(button, layoutParams); button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub //alert(); } }); button.setOnTouchListener(touchListener); final Button btButton = new Button(this); btButton.setText("测试按钮移动"); layoutParams = new AbsoluteLayout.LayoutParams(120, 60, 20, 160); mLayoutGroup.addView(btButton, layoutParams); btButton.setOnTouchListener(touchListener); } OnTouchListener touchListener = new OnTouchListener() { int temp[] = new int[]{0, 0}; public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub int eventAction = arg1.getAction(); Log.e("testButtonMove", "OnTouchAction:"+eventAction); int x = (int)arg1.getRawX(); int y = (int)arg1.getRawY(); switch (eventAction) { case MotionEvent.ACTION_DOWN: temp[0] = (int)arg1.getX(); temp[1] = (int)(y-arg0.getTop()); mLayoutGroup.bringChildToFront(arg0); arg0.postInvalidate(); break; case MotionEvent.ACTION_MOVE: int left = x - temp[0]; int top = y - temp[1]; int right = left + arg0.getWidth(); int bottom = top + arg0.getHeight(); arg0.layout(left, top, right, bottom); arg0.postInvalidate(); break; default: break; } return false; } }; void alert() { new AlertDialog.Builder(this) .setNeutralButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }) .setTitle("test button") .setMessage("test test test!!!") .show(); } }
评论
5 楼
xinyuetonghua
2012-05-03
请教下,怎么解决同一个按钮的OnTouchListener()事件和onclick事件的冲突问题?
4 楼
songyu719
2011-10-22
这个必须使用绝对布局吧!
3 楼
yelwen000
2011-06-21
是不是只有button 能移动 的啊
Layout移动就不行了[e01][b][/b][color=red][/color]
Layout移动就不行了[e01][b][/b][color=red][/color]
2 楼
yelwen000
2011-06-21
是不是只有button 能移动 的啊
Layout移动就不行了[e01]
Layout移动就不行了[e01]
1 楼
tanghanlin
2011-04-03
怎么没效果
发表评论
-
http://www.android-studio.org/
2018-08-06 09:25 0http://www.android-studio.org/ ... -
SlidingDrawer源码
2012-03-14 10:13 3804我把SlidingDrawer源码提了出来,希望对1.5的朋友 ... -
简单拖动效果(带Cache,需要完善)
2011-10-13 15:10 4226如何去实现一个具有幻象的拖拽效果? 所谓”幻象“就是当你按下去 ... -
Android Activity中启动另一应用程序的方法,无需得到类名
2011-08-02 14:46 17256在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和 ... -
java-universal-tween-engine,一个动画系统库
2011-06-29 09:21 6742http://code.google.com/p/java-u ... -
网上发现的一个android UI包
2011-05-24 12:21 4089里面有些UI和效果 -
android中使用代码启动其他程序
2011-04-29 23:15 5280你要訪問其他的程序,那麼這個程序要先裝載到模擬器或真機上面,因 ... -
listView背景问题以及限制editText字数以及如果想通知别人已经不能在写
2011-04-29 22:44 32031.在listView设置好背景之后 你如果点击空白出 你会发 ... -
Android键盘和触摸事件处理
2011-04-29 22:32 7003activity和VIEW都能接收触摸和按键,如果响应事件只需 ... -
Android的绘制文本对象FontMetrics的介绍及绘制文本
2011-04-29 22:29 11488一。Android绘制文本对象FontMetrics介绍 ... -
Android View 拖动&插入
2011-04-29 22:20 3543View 拖动&插入 即: 支持 拖动图标 然后 ... -
使TextView文本可以水平和垂直滚动
2011-04-29 21:59 14425在做一个小的电子书程序,要求电子书具有放大缩小的功能,所以肯定 ... -
ArrayAdapter源码
2011-04-29 12:29 6297看看人家怎么写的。 /* * Copyright (C ... -
Android下获取开机时间
2011-04-02 21:51 6222找了一圈没发现能得到开机启动时间资料,于是乎突发奇想,得到了解 ... -
AutoCompleteTextView连接到数据库
2011-03-30 20:49 4724AutoCompleteTextView可以根据输入 ... -
改变屏幕Brightness(亮度)
2011-03-30 12:48 4601http://www.eoeandroid.com/forum ... -
拖动一个控件在另一个控件(layout)上,并固定位置在几个位置显示
2011-02-24 20:51 5893实现效果: 鼠标拖动btn SSS,SSS在水平的layo ... -
Handler与Message类,实现n秒后无操作自动消失功能
2011-02-24 20:45 4634实现功能:某控件不操作10秒后,自动消失。如照相机变焦条出现后 ... -
带删除按钮的ListView
2011-02-24 10:33 6145不用说了,上图先: import java.util.A ... -
android3.0之Action Bar基础
2011-02-22 17:12 6828http://www.android123.com.cn/an ...
相关推荐
本文将详细介绍如何实现“拖拽图片”和“拖动浮动按钮到处跑”的功能。 首先,我们需要在`onCreate`方法中初始化屏幕尺寸,以便在拖动过程中限制按钮或图片的边界。这可以通过获取`DisplayMetrics`对象来实现: ``...
本篇将探讨如何在Android应用中实现图片和浮动按钮的拖动功能,主要涉及两个示例:一个使用`AbsoluteLayout`的按钮拖动,另一个是基于`ImageView`的图片拖动。 首先,我们来看如何实现拖动浮动按钮的功能。这里使用...
* 可拖拽的悬浮控件按钮 * 自动吸附左右边框 * 直接xml布局里引用即可。 * 要设置setOnClickListener点击事件,即可实现拖拽和点击功能。 * 尺寸大小,样式及背景图片遵循ImageView即可。 原文有介绍有动态介绍图...
下面将详细讨论Android拖拽悬浮按钮的实现原理、关键代码和相关知识点。 一、浮动动作按钮(Floating Action Button) Floating Action Button是Android Material Design设计语言中的一个重要组件,它的形状通常是...
Android自定义可拖拽的悬浮按钮DragFloatingActionButton Android自定义可拖拽的悬浮按钮DragFloatingActionButton是Android 5.0系统添加的新控件,它继承至ImageView,因此拥有ImageView的所有属性。下面是对...
在Android开发中,创建一个可拖动的浮动工具条或菜单是一种常见的需求,它能提供用户友好的交互体验。这个“Android 可拖动浮动工具条(菜单)Demo”就是一个很好的示例,展示了如何实现这样的功能。下面我们将深入...
在Android开发中,桌面漂浮按钮(通常称为悬浮窗或Floating Action Button, FAB)是一种设计元素,用于提供主要操作或者快速访问功能。它通常是一个圆形的按钮,上面有一个图标,设计简洁,易于识别,旨在增强用户...
首先,浮动按钮的设计理念源自Material Design,它在Android系统中被广泛使用,但在iOS应用中也可以根据需求进行适配。这种按钮通常是一个圆形的图标,颜色鲜明,能够吸引用户的注意力。在iOS中,浮动按钮常常用来...
在Android开发中,实现一个类似iOS的Assistive Touch功能是一项常见的需求,它提供了一个浮动按钮,用户可以随时随地拖动并访问常用的功能。这个“android 可拖拽按钮 类似iOS assistive touch可全屏拖拽”的项目...
Flutter任意拖动的悬浮按钮,可以更改参数设定边界范围, 内包含多个Demo 仓库地址 https://github.com/ihongka/FlutterDIY
在安卓平台上,"仿AssistiveTouch 窗口浮动按钮"是一种常见的用户界面功能,类似于苹果iOS系统中的AssistiveTouch。这个功能为用户提供了一个便捷的入口,通过一个小巧的浮动按钮,用户可以快速访问各种常用操作或者...
在Android开发中,"Android悬浮拖动无视父类组件按钮"是一个相对高级且实用的技术,主要涉及到了Android的自定义视图、触摸事件处理以及布局管理等方面的知识。下面将详细阐述这一主题的相关知识点。 首先,Android...
在Android开发中,创建一个可拖动并能自动吸附到屏幕边缘的悬浮View是一项常见的需求,这通常用于实现类似桌面小部件或者浮动工具栏的功能。本文将深入探讨如何实现这样的功能,主要涉及Android Java编程语言以及...
在这个ViewGroup中,我们可以添加需要显示的各种View,如按钮、文本、图片等。自定义ViewGroup时,需要重写onMeasure()和onLayout()方法,以确定ViewGroup及其子View的大小和位置。 接着,我们需要一个悬浮服务...
在Android开发中,浮动视图(Floating View)通常指的是悬浮窗口或者浮动小部件,它们可以在应用程序的顶部或者屏幕的任意位置显示,不依赖于任何特定的Activity。这种功能常见于通知、聊天应用的小窗口或者自定义...
带有菜单和可拖动控件的浮动操作按钮 [ ]( ) 将其添加到存储库末尾的root build.gradle中: allprojects { repositories { ... maven { url 'https://jitpack.io' } } } 步骤2.添加依赖项 dependencies {...
自定义floatview,无需申明悬浮框权限,利用WindowManager TYPE_TOAST实现全站浮动式按钮,重写touch事件实现任意拖动,将view加入windowmanager层,可以使用控件实现类似来电秀的效果。 MIUI使用TYPE_TOAST也会无效...
悬浮框,也称为对话框或者浮动窗口,通常用于显示临时信息或者提供额外的功能选项,而不打断用户对主应用程序界面的操作。下面我们将深入探讨如何在Xamarin.Android中实现这样一个功能。 首先,悬浮框在Android中...
在Android平台上,实现类似iPhone的AssistiveTouch功能,可以为用户提供便捷的触控操作,类似于浮动菜单,方便用户快速访问常用功能。这个功能通常包括屏幕截图、返回、主页、多任务等操作,而且可以自定义设置。在...
通过这个 `(android实现可拖拽的悬浮框)使用示例`,开发者可以了解到如何结合`WindowManager`、触摸事件监听以及自定义服务来创建一个可拖动的悬浮窗。这只是一个基础的实现,实际应用中可能需要考虑更多的细节,如...