android多个拖动控件,Android使用WindowManager制作一个可拖动的控件
效果图如下
第一步:新建DragView继承RelativeLayout
package com.rong.activity;
import com.rong.test.R;
import android.content.Context;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RelativeLayout;
public class DragView extends RelativeLayout {
private WindowManager windowManager;// 用于可拖动的浮动窗口
private WindowManager.LayoutParams windowParams;// 浮动窗口的参数
private Button myButton;
public DragView(Context context,AttributeSet attrs) {
super(context,attrs);
init();
}
private void init() {
View.inflate(getContext(),R.layout.layout_my,this);
myButton = new Button(getContext());
myButton.setText("我的");
myButton.setBackgroundColor(Color.RED);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 获取当前点的xy位置
int currentX = (int) event.getX();
int currentY = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (windowManager == null) {
setWindowParams(currentX,currentY);
windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(myButton,windowParams);
}
break;
case MotionEvent.ACTION_MOVE:
windowParams.x = currentX;
windowParams.y = currentY;
windowManager.updateViewLayout(myButton,windowParams);
break;
case MotionEvent.ACTION_UP:
// windowManager.removeView(myButton);
break;
}
return true;
}
private void setWindowParams(int x,int y) {
// 建立item的缩略图
windowParams = new WindowManager.LayoutParams();
windowParams.gravity = Gravity.TOP | Gravity.LEFT;// 这个必须加
// 得到preview左上角相对于屏幕的坐标
windowParams.x = x;
windowParams.y = y;
// 设置宽和高
windowParams.width = 200;
windowParams.height = 200;
windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;
}
}
第二步:新建布局文件activity_main.xml
android:id="@+id/main_touchlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical" >
android:id="@+id/main_touchview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:background="#ff0000" />
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
android多个拖动控件,Android使用WindowManager制作一个可拖动的控件相关推荐
- 使用Java制作一个简易的远控终端
使用Java制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端 ...
- 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |it前端开发
b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!D ...
- 使用python制作一个简易的远控终端
使用python制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服 ...
- 自定义view学习-手把手教你制作一个可扩展日历控件
来看看效果图先,手把手教你实现一个简易,但高扩展度的日历控件,可自由扩展成签到,单选,多选日期. 首先我们来分析实现思路.对于上图的效果,很明显是一个6x7的表格. 我们可以两个for循环控制绘制每个 ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- Android Canvas制作一个可以拖动改变任意形状的四边形效果,并填充颜色
先上效果图: 思路: 1. 定义四个点, 初始化四个点的坐标,绘制点. 2. 绘制 直线,把四个点连接起来. 3. 根据四个点的坐标绘制直线路径,填充颜色. 4. 判断手势是否点中四个点的坐标范围内. ...
- checkbox控件的checked属性作用是_VB6基本控件的使用,制作一个数据输入窗口
一个应用程序少不了数据输入的功能,今天教大家使用控件设计一个数据输入窗口,需要使用到6个控件: Label 文字标签 TextBox 文本框 OptionButton 单选按钮 ComboBox 下拉 ...
- android绘制view的撤销,DrawingView android 上的一个涂鸦控件。可以设置画笔的粗细,颜色,撤销上一笔涂鸦,提供保存图片的接口。 @codeKK Android开源站...
DrawingView 的原型来自DrawingView-Android,是 android 的一个可涂鸦控件. 之所以做这个控件是因为前段时间写了一个截图应用需要用到涂鸦功能,现在把涂鸦的控件单独拿 ...
- android将被代替的控件,Android 控件被忽略的属性
作者:ivm 参考了 http://www.cnblogs.com/jisheng/archive/2013/01/10/2854088.html 导航栏: 1.TextView autoLink H ...
最新文章
- python学习笔记(7-11)
- NA-NP-IE系列实验35:标准ACL
- 火狐 IE 解析xmlDOM 的不同写法
- spring之继承配置
- (带动画效果)卷积神经网络的讲解.pptx
- C/C++笔试、面试题(上)
- ABAP Netweaver Webcontent path的determine逻辑
- css animation动画
- Run ASMX Without IIS
- Android Framework中的Application Framework层介绍
- Git submodule 知识总结
- win2008r2 or centos6 硬盘挂载
- PTA 数据结构与算法题目集 6-1
- DOM节点操作大全(一)
- C#面向过程之编译原理、变量、运算符
- linux群ping服务器各网段脚本
- 计算机文字录入在线打字,汉字输入方法-在线打字吧-在线拼音五笔打字练习软件,中文录入打字软件...
- 逻辑函数的化简-代数法化简
- 如何修改计算机网络密码,无线网密码怎么改,教您如何修改无线网络密码
- Andro Studio 基于Zing一维码二维码扫描代码
热门文章
- 滑轮滚动到页面底部ajax加载数据的实例
- Linux入门实践笔记(七)——云服务器中配置Java项目的JMX连接失败问题解决记录
- AAAI2020中的四篇推荐系统好文(附论文下载链接)
- Java技术——你真的了解String类的intern()方法吗
- 腾讯广告算法大赛 | 第三周周冠军心得分享
- KDD'21 | FaceBook :基于图的负采样方法
- camera android 黑屏,Android Camera.startPreview()启动未报错,但SurfaceView无画面输出
- 用post方式获取html,httpclient中怎么使用post方法获取html的源码
- hashmap是线程安全的吗?怎么解决?_线程安全及三种解决方案
- php 父类命名空间,对命名空间的理解、类的继承与实现——2019年7月31号22时03分...