您的位置:首页 > 其它

移动控件位置和多次点击事件的源码实现

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;}});}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: