Android使用WindowManager做一个可拖动的控件(七)
16lz
2021-01-23
效果图如下
第一步:新建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
更多相关文章
- Android Window 二 可移动悬浮窗口 WindowManager
- 图片拖动功能实现
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContent
- android 下载图片保存在sdcard并显示可拖动缩放
- Android 窗口Flags详解
- Hello Android - 去掉窗口标题和程序全屏
- Android WindowManager 全局悬浮窗 + AccessibilityService+ Rec
- Android Manager之WindowManager(窗口管理服务)