android的多次点击事件的实现(有源码)





import com.example.mobilesafe74.utils.ConstantValue;
import com.example.mobilesafe74.utils.SpUtil;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
private ImageView tv_drag;
private Button bt_top;
private Button bt_bottom;
private WindowManager mWm;
private int mScreenwidth;
private int mScreenheight;
private long[] mhits = new long[2];
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toast_location);
initUI();
}
// 当前可以拖拽的图片控件
tv_drag = (ImageView) findViewById(R.id.tv_drag);
bt_top = (Button) findViewById(R.id.bt_top);
bt_bottom = (Button) findViewById(R.id.bt_bottom);
mWm = (WindowManager) getSystemService(WINDOW_SERVICE);
mScreenwidth = mWm.getDefaultDisplay().getWidth();
mScreenheight = mWm.getDefaultDisplay().getHeight();
ConstantValue.LOCATION_X, 0);
int locationY = SpUtil.getInt(getApplicationContext(),
ConstantValue.LOCATION_Y, 0);
// 指定宽高都是w w
LayoutParams LayoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
LayoutParams.leftMargin = locationX;
LayoutParams.topMargin = locationY;
if (LayoutParams.topMargin > mScreenheight / 2) {
bt_bottom.setVisibility(View.INVISIBLE);
bt_top.setVisibility(View.VISIBLE);
bt_bottom.setVisibility(View.VISIBLE);
bt_top.setVisibility(View.INVISIBLE);
// 将以上规则作用在控件上面
tv_drag.setLayoutParams(LayoutParams);
tv_drag.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
System.arraycopy(mhits, 1, mhits, 0, mhits.length - 1);
mhits[mhits.length - 1] = SystemClock.uptimeMillis();
if (mhits[mhits.length - 1] - mhits[0] < 500) {
// 满足双击事件后,居中
int left = mScreenwidth / 2 - tv_drag.getWidth() / 2;
int right = mScreenheight / 2 - tv_drag.getHeight() / 2;
int top = mScreenwidth / 2 + tv_drag.getWidth() / 2;
int bottom = mScreenheight / 2 + tv_drag.getHeight() / 2;
tv_drag.layout(left, top, right, bottom);
});
tv_drag.setOnTouchListener(new OnTouchListener() {
private int startY;
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:// 按下
// 初始位置的坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
case MotionEvent.ACTION_MOVE:// 移动
int moveX = (int) event.getRawX();
int moveY = (int) event.getRawY();
int disY = moveY - startY;
int left = tv_drag.getLeft() + disX;
int top = tv_drag.getTop() + disY;
int right = tv_drag.getRight() + disX;
int bottom = tv_drag.getBottom() + disY;
// 容错处理
if (left < 0) {
return true;
}
return true;
}
return true;
}
return true;
}
if (top > mScreenheight / 2) {
bt_bottom.setVisibility(View.INVISIBLE);
bt_top.setVisibility(View.VISIBLE);
bt_bottom.setVisibility(View.VISIBLE);
bt_top.setVisibility(View.INVISIBLE);
// 重置坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
case MotionEvent.ACTION_UP:// 抬起
// 记录位置坐标
SpUtil.putInt(getApplicationContext(),
ConstantValue.LOCATION_X, tv_drag.getLeft());
SpUtil.putInt(getApplicationContext(),
ConstantValue.LOCATION_Y, tv_drag.getTop());
}
// 返回事件,只有触摸操作的时候用true,有点击事件记得加上return false
return false;
}
});
}
}
android的多次点击事件的实现(有源码)的更多相关文章
- Android Button四种点击事件和长按事件
项目XML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...
- 查找和定位Android应用的按钮点击事件的代码位置基于Xposed Hook实现
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956455 在进行Android程序的逆向分析的时候,经常需要通过Androi ...
- Android学习---ListView的点击事件,simpleAdapter和arrayadapter,SimpleCursoAdapter的原理和使用
如题,本文将介绍 listview的点击事件,simpleAdapter和arrayadapter的原理和使用. 1.ListView的注册点击事件 //注册点击事件 personListView.s ...
- android 入门 003 (点击事件)
点击事件 有四种实现方式. 1.内部类实现方式 1.0 package cn.rfvip.clickevent; import android.app.Activity; import android ...
- Android 给TextView添加点击事件
首先设定TextView的clickable属性为true. 可以在布局文件中进行设定,比如: <TextView android:id="@+id/phone" andro ...
- Android ListView中Item点击事件失效解决方案
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...
- Android 自定义View——自定义点击事件
每个人手机上都有通讯录,这是毫无疑问的,我们通讯录上有一个控件,在通讯录的最左边有一列从”#”到”Z”的字母,我们通过滑动或点击指定的字母来确定联系人的位置,进而找到联系人.我们这一节就通过开发这个控 ...
- Android 7.0 TextView点击事件无效修复方案
public class PostTextView extends TextView { private Handler handler = new Handler(Looper.getMainLoo ...
- 关于Android避免按钮重复点击事件
最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...
随机推荐
- Android输入法弹出时覆盖输入框问题
本文来自网易云社区 作者:孙有军 当一个activity中含有输入框时,我们点击输入框,会弹出输入法界面,整个界面的变化效果与manifest中对应设置的android:windowSoftInput ...
- 谋哥:App推广最有效的是自推广
[谋哥每天一原创,第一百五十二篇] 目前市场上,各类App已经覆盖到所有你能想到的领域,并且各个山头也被占得差不多了,网上 的说法就是布局已经完成.如果你想现在再插那么一杠子进去,就得看你的真本事了, ...
- C#开发微信公众平台教程
http://www.cnblogs.com/xishuai/p/3625859.html http://www.cnblogs.com/wuhuacong/p/3614175.html http:/ ...
- 如何部署安装软件:vs2010 'VS' Inno Setup
一直以来就是调试程序,生成的文件在debug或者release下,当没有其他资源文件时,这些程序也不用打包,直接就能够运行,但是程序中总会有一些额外的资源文件,视频啊,图片啊.这些需要打包在一个安装文 ...
- jmeter全局变量配置:将token运用到全局(跨线程组使用变量)
请注意元器件的执行顺序: 请将提取token的配置原件放在设置全局变量的配置元器件前面(本来是一个超级马虎的人,真是俗称“方脑壳”啊) 1.获取登录后的token(提取可以用json path Ext ...
- Python-S9——Day83-ORM项目实战
01 上节回顾 02 后台管理布局 03 按钮权限控制的简单形式 04 修改表结构 05 重构数据结构 06 限制权限颗粒度 01 上节回顾 1.1 项目的组织架构: 1.2 项目组件的版本说明: 使 ...
- Python-S9——Day100-Web前端框架之Vue
01 课程简介: 02 let和const: 03 箭头函数: 04 对象的单体模式: 05 nodejs介绍和npm操作: 06 webpack.babel介绍和vue的第一个案例: 07 昨日内容 ...
- 在IE浏览器下,PDF将弹出窗口遮挡了
写了个embed标签里面放这个pdf 然后点击其他地方的弹框pdf把他遮盖住了 如下: 先是改z-index,没卵用. 百度了好久,终于找到了个有用的 https://blog.csdn.net/it ...
- [ecmagnet][python基础]有关git那些事
#1 git教程 # 注册git服务器用户,权限-- 注意这个和客户端用户不是一样 # 客户端(linux)提交代码到本地仓库(简单版,了解原理) a.安装git sudo apt-get insta ...
- java之ArrayList.add
ArrayList添加 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! ele ...