移动控件位置和多次点击事件的源码实现
2017-12-11 20:48
369 查看
package com.example.phone.activity;import com.example.phone.R;import com.example.phone.utils.ConstantValue;import com.example.phone.utils.SpUtil;import android.app.Activity;import android.content.Context;import android.opengl.Visibility;import android.os.Bundle;import android.os.SystemClock;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.WindowManager;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.RelativeLayout.LayoutParams;import android.widget.TextView;import android.widget.Toast;public class ToastLocationActivity extends Activity {protected static final String tag = "ToastLocationActivity";private ImageView iv_location_toast;private TextView tv_location_button;private TextView tv_location_top;private int startX;private int startY;private WindowManager mWM;private long startTime = 0;private long[] mHits = new long[2];@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_toast_location);initUI();}private void initUI() {iv_location_toast = (ImageView) findViewById(R.id.iv_location_toast);tv_location_button = (TextView) findViewById(R.id.tv_location_button);tv_location_top = (TextView) findViewById(R.id.tv_location_top);mWM = (WindowManager) getSystemService(Context.WINDOW_SERVICE);// iv的初始化int location_X = SpUtil.getInt(getApplicationContext(),ConstantValue.LOCATION_X, 0);int location_Y = SpUtil.getInt(getApplicationContext(),ConstantValue.LOCATION_Y, 0);Log.i(tag, location_X + "---" + location_Y);RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);layoutParams.leftMargin = location_X;layoutParams.topMargin = location_Y;iv_location_toast.setLayoutParams(layoutParams);iv_location_toast.setOnTouchListener(new OnTouchListener() {@SuppressWarnings("deprecation")@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction()) {case MotionEvent.ACTION_DOWN:Log.i(tag, "down");startX = (int) event.getRawX();startY = (int) event.getRawY();Log.i(tag, startX + "---" + startY);break;case MotionEvent.ACTION_UP:Log.i(tag, "up");Log.i(tag, startX + "---" + startY);// event的坐标是点击时坐标,不是整个iv的坐标,嗯SpUtil.putInt(getApplicationContext(),ConstantValue.LOCATION_X,iv_location_toast.getLeft());SpUtil.putInt(getApplicationContext(),ConstantValue.LOCATION_Y,iv_location_toast.getTop());System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);mHits[mHits.length - 1] = SystemClock.uptimeMillis();if (mHits[mHits.length - 1] - mHits[0] < 500) {// 响应了一个三击事件LayoutParams lp2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);lp2.leftMargin = mWM.getDefaultDisplay().getWidth() / 2 - 10;lp2.topMargin = (mWM.getDefaultDisplay().getHeight() - 22) / 2;iv_location_toast.setLayoutParams(lp2);}break;case MotionEvent.ACTION_MOVE:Log.i(tag, "move");int endX = (int) event.getRawX();int endY = (int) event.getRawY();int disX = endX - startX;int disY = endY - startY;int left = iv_location_toast.getLeft() + disX;int top = iv_location_toast.getTop() + disY;int right = iv_location_toast.getRight() + disX;int bottom = iv_location_toast.getBottom() + disY;if (left < 0|| top < 0|| right > mWM.getDefaultDisplay().getWidth()|| bottom > (mWM.getDefaultDisplay().getHeight() - 22)) {return true;}iv_location_toast.layout(left, top, right, bottom);startX = (int) event.getRawX();startY = (int) event.getRawY();Log.i(tag, startX + "---" + startY);if (top < ((mWM.getDefaultDisplay().getHeight() - 22) / 2)) {tv_location_top.setVisibility(View.INVISIBLE);tv_location_button.setVisibility(View.VISIBLE);} else {tv_location_button.setVisibility(View.INVISIBLE);tv_location_top.setVisibility(View.VISIBLE);}break;}return true;}});}}
相关文章推荐
- android的多次点击事件的实现(有源码)
- 微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
- Android开发之源码:多次点击事件的原理和实现
- 使用layout方法实现控件的移动并且不影响点击事件
- 简单的实现listView中item多个控件以及点击事件
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- 从源码角度入手实现RecyclerView的Item点击事件
- 对多个Linerlayout设置点击事件,并实现Activity的跳转。(用Switch简化多次设置点击事件的重复代码)
- Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
- .net 实现移动控件位置
- Android中ListView实现子控件点击事件后ListView点击事件失效解决办法
- JavaScript--点击按钮实现选中选项移动到指定位置(下拉框)或全部选项移动
- .net 实现移动控件位置
- 用户控件 + ScriptManager 实现点击后弹出窗口且窗口坐标追随点击位置效果
- ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法
- 2种方式实现ListView中中每一项下的任意控件的点击事件
- 用NavMesh实现人物移动到鼠标点击的位置
- 用户控件 + ScriptManager 实现点击后弹出窗口且窗口坐标追随点击位置效果
- Android控件的两次及多次点击事件