android touchevent透过悬浮按钮,onTouchEventListener实现悬浮按钮

原理:实现OnTouchListener通过重写onTouch()方法来实现,下面是主要代码:

布局:

android:layout_width="50dp"

android:layout_height="50dp"

android:orientation="horizontal"

android:background="#ffff00"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"

android:orientation="horizontal">

android:layout_height="wrap_content"

android:padding="5px"

android:text="当前坐标:"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="5px"

android:text="0,0"/>

MainActivity

package com.anqiansong.customview;

import android.app.Activity;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.MotionEvent;

import android.view.View;

import android.view.Window;

import android.view.View.OnTouchListener;

import android.widget.FrameLayout.LayoutParams;

import android.widget.LinearLayout;

import android.widget.TextView;

public class MainActivity extends Activity implements OnTouchListener{

private LinearLayout moveView;

private int currentX;

private int currentY;

private TextView xy;

private int width;

private int height;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

DisplayMetrics dmDisplayMetrics=this.getResources().getDisplayMetrics();

width=dmDisplayMetrics.widthPixels;

height=dmDisplayMetrics.heightPixels;

moveView = (LinearLayout) findViewById(R.id.moveView);

xy = (TextView) findViewById(R.id.xy);

moveView.setOnTouchListener(this);

}

@Override

public boolean onTouch(View view, MotionEvent event) {

switch (event.getAction())

{

case MotionEvent.ACTION_DOWN:

currentX = (int) event.getRawX();

currentY = (int) event.getRawY();

break;

case MotionEvent.ACTION_MOVE:

int x2 = (int) event.getRawX();

int y2 = (int) event.getRawY();

LayoutParams params=(LayoutParams) view.getLayoutParams();

params.leftMargin+=x2-currentX;

params.topMargin+=y2-currentY;

view.setLayoutParams(params);

currentX = x2;

currentY = y2;

xy.setText(x2 + "," + y2);

break;

case MotionEvent.ACTION_UP:

int left=view.getLeft();

int base=(width-view.getWidth())/2;

LayoutParams params2=(LayoutParams) view.getLayoutParams();

if(left>base){

params2.leftMargin=width-view.getWidth();

}else{

params2.leftMargin=0;

}

view.setLayoutParams(params2);

break;

}

return true;

}

}

效果图:

01439d29f821657cd84837c795fa85c3.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值