效果图如下

Android使用WindowManager做一个可拖动的控件(七)_第1张图片


第一步:新建DragView继承RelativeLayout

packagecom.rong.activity;importcom.rong.test.R;importandroid.content.Context;importandroid.graphics.Color;importandroid.graphics.PixelFormat;importandroid.util.AttributeSet;importandroid.view.Gravity;importandroid.view.MotionEvent;importandroid.view.View;importandroid.view.WindowManager;importandroid.widget.Button;importandroid.widget.RelativeLayout;publicclassDragViewextendsRelativeLayout{privateWindowManagerwindowManager;//用于可拖动的浮动窗口privateWindowManager.LayoutParamswindowParams;//浮动窗口的参数privateButtonmyButton;publicDragView(Contextcontext,AttributeSetattrs){super(context,attrs);init();}privatevoidinit(){View.inflate(getContext(),R.layout.layout_my,this);myButton=newButton(getContext());myButton.setText("我的");myButton.setBackgroundColor(Color.RED);}@OverridepublicbooleanonTouchEvent(MotionEventevent){//获取当前点的xy位置intcurrentX=(int)event.getX();intcurrentY=(int)event.getY();switch(event.getAction()){caseMotionEvent.ACTION_DOWN:if(windowManager==null){setWindowParams(currentX,currentY);windowManager=(WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);windowManager.addView(myButton,windowParams);}break;caseMotionEvent.ACTION_MOVE:windowParams.x=currentX;windowParams.y=currentY;windowManager.updateViewLayout(myButton,windowParams);break;caseMotionEvent.ACTION_UP://windowManager.removeView(myButton);break;}returntrue;}privatevoidsetWindowParams(intx,inty){//建立item的缩略图windowParams=newWindowManager.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

<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/main_touchlayout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:orientation="vertical"><com.rong.activity.DragViewandroid:id="@+id/main_touchview"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerInParent="true"android:background="#ff0000"/></RelativeLayout>

Run

更多相关文章

  1. Android Window 二 可移动悬浮窗口 WindowManager
  2. 图片拖动功能实现
  3. Android中将布局文件/View添加至窗口过程分析 ---- 从setContent
  4. android 下载图片保存在sdcard并显示可拖动缩放
  5. Android 窗口Flags详解
  6. Hello Android - 去掉窗口标题和程序全屏
  7. Android WindowManager 全局悬浮窗 + AccessibilityService+ Rec
  8. Android Manager之WindowManager(窗口管理服务)

随机推荐

  1. 讲真,Markdown有啥魅力,竟让如此多人入迷!
  2. 深入探讨 Undefined [每日前端夜话(0x0E)
  3. 《大前端吊打面试官系列》之备战面试篇!
  4. 现代浏览器探秘(part2):导航[每日前端夜
  5. 用Python和Tableau对母婴商品销量进行数
  6. 浅议 Promise/Futures 模型 [每日前端夜
  7. 1-20
  8. 现代浏览器探秘(part3):渲染 [每日前端夜
  9. 自学系列 | 就谈知识体系!
  10. Python异步爬虫进阶必备,效率杠杠的!