拖拉自定义小模块_Activity背景透明效果_多次击事件处理

知识点:

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数值控制点击时间
			
			//多次点击之后的操作
			
			
		}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值