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" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值