知识点:
1 拖拉小模块
2 Activity背景透明效果
3 多次点击事件处理
1 拖拉小模块
1 拖拉自定义模块需要使用setOnTouchListener监听触摸事件,并重新记录起点坐标。
package com.example.mobliesoft.Activity.Setting;
import com.example.mobliesoft.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class DrawViewActivity extends Activity {
private ImageView ivDrawview;
private RelativeLayout myrelativelayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_draw_view_setting);
ivDrawview = (ImageView) findViewById(R.id.iv_drawview);
myrelativelayout = (RelativeLayout) findViewById(R.id.RelativeLayout_Drag);
InitDrawviewToDrag();
}
private void InitDrawviewToDrag() {
// ivDrawview.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
//
// }
// });
//
ivDrawview.setOnTouchListener(new OnTouchListener() {
private int startX;
private int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://小模块检测被按下事件
startX = (int) event.getRawX();
startY = (int) event.getRawY();
System.out.println("startX" + startX + "startY" + startY);
break;
case MotionEvent.ACTION_MOVE: //小模块在移动事件
int endX = (int) event.getRawX();
int endY = (int) event.getRawY();
System.out.println(" endX" + endX + "endY" + endY);
int MoveX = endX - startX;
int MoveY = endY - startY;
int l = ivDrawview.getLeft() + MoveX;
int r = ivDrawview.getRight() + MoveX;
int t = ivDrawview.getTop() + MoveY;
int b = ivDrawview.getBottom() + MoveY;
ivDrawview.layout(l, t, r, b);
// 需要重新设置开始坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP: //模块抬起事件
endX = (int) event.getRawX();
endY = (int) event.getRawY();
System.out.println("最后的输出 :endX" + endX + "endY" + endY);
break;
default:
break;
}
return true; //使事件可以继续传递下去
}
});
}
}
使用sharePreference可记录最后坐标,实现拖拽位置记录功能:
sharedPreferences.edit().putInt("lastX", ivDrawview.getLeft()).commit();
sharedPreferences.edit().putInt("lastY", ivDrawview.getTop()).commit();
重新给控件设定起点坐标方式:
int l = ivDrawview.getLeft() + MoveX;
int r = ivDrawview.getRight() + MoveX;
int t = ivDrawview.getTop() + MoveY;
int b = ivDrawview.getBottom() + MoveY;
ivDrawview.layout(l, t, r, b);
重新打开Activity时需要将记录的最后获取的起点位置更新到当前Activity中,可使用:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) ivDrag
.getLayoutParams();// 获取布局对象
layoutParams.leftMargin = lastX;// 设置左边距
layoutParams.topMargin = lastY;// 设置top边距
ivDrag.setLayoutParams(layoutParams);// 重新设置位置
ivDrag是ivDrawview
2 对应的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout_Drag"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/call_locate_blue"
android:gravity="center"
android:text="按住提示框拖到任意位置按手机返回键立即生效" />
<TextView
android:id="@+id/textView2"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@drawable/call_locate_blue"
android:gravity="center"
android:text="按住提示框拖到任意位置按手机返回键立即生效" />
<ImageView
android:id="@+id/iv_drawview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/textView1"
android:layout_marginLeft="96dp"
android:layout_marginTop="76dp"
android:src="@drawable/call_locate_orange" />
</RelativeLayout>
2 背景透明效果:
对于背景透明效果其实就是一个Activity使用一个透明主题,并在父控件中将背景设置为#a000
<activity android:name="com.example.mobliesoft.Activity.Setting.DrawViewActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
/>
在总布局XML文件中,将父控件中将背景设置为#a000
android:background="#5000"
3 多次点击事件处理
long[] mHits = new long[2];//更改数值确定点击次数
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) { //更改500数值控制点击时间
//多次点击之后的操作
}