Java 在android中如何计算按钮按下时间?

Java 在android中如何计算按钮按下时间?,java,android,timer,Java,Android,Timer,我正在开发一个项目,在这个项目中,我希望在不同的时间执行不同的任务,比如如果用户在5毫秒后按下按钮,然后执行一个代码,如果按下的时间超过该时间,则执行不同的任务 事实上,他们在facebook聊天中创建了一个聊天头像 问题是,我想在ActionDown事件中打开或启动我的应用程序 但问题是,当用户试图将聊天头从一个位置重新分配到另一个位置时,事件就会发生 像 在这里,我想向应用程序发送动作\停止事件 public class ChadHead extends Service {

我正在开发一个项目,在这个项目中,我希望在不同的时间执行不同的任务,比如如果用户在5毫秒后按下按钮,然后执行一个代码,如果按下的时间超过该时间,则执行不同的任务


事实上,他们在facebook聊天中创建了一个聊天头像

问题是,我想在ActionDown事件中打开或启动我的应用程序

但问题是,当用户试图将聊天头从一个位置重新分配到另一个位置时,事件就会发生 像

在这里,我想向应用程序发送动作\停止事件

      public class ChadHead extends Service {
  private final Handler mHandler = new Handler();
    private Runnable mTimer1;
private WindowManager windowManager;
private ImageView chatHead;
Display display;
int width;
    int count=0;


@Override
public IBinder onBind(Intent intent) {
    // Not used
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

     mTimer1 = new Runnable() {

            @Override
            public void run() {
                count++;
                // TODO Auto-generated method stub
                mHandler.postDelayed(this, 5000);
                if (count == 1) {
                    mHandler.removeCallbacks(mTimer1);
                    // put your code here:
                }
            }
        };



    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    chatHead = new ImageView(this);
    chatHead.setImageResource(R.drawable.ic_launcher);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

    windowManager.addView(chatHead, params);

    chatHead.setOnTouchListener(new View.OnTouchListener() {
        private int initialX;
        private int initialY;
        private float initialTouchX;
        private float initialTouchY;

        @SuppressWarnings("deprecation")
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                initialX = params.x;
                initialY = params.y;
                initialTouchX = event.getRawX();
                initialTouchY = event.getRawY();

                 mHandler.postDelayed(mTimer1, 0);
                /*Intent i;
                PackageManager manager = getPackageManager();
                try {
                   i = manager.getLaunchIntentForPackage("com.technorapper.technorappermapp");
                if (i == null)
                    throw new PackageManager.NameNotFoundException();
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                startActivity(i);
                } catch (PackageManager.NameNotFoundException e) {

                }*/


                Toast.makeText(getApplicationContext(), "TechnoRapper", 50)
                        .show();

                return true;
            case MotionEvent.ACTION_MOVE:
                params.x = initialX
                        + (int) (event.getRawX() - initialTouchX);
                params.y = initialY
                        + (int) (event.getRawY() - initialTouchY);
                windowManager.updateViewLayout(chatHead, params);

                display = windowManager.getDefaultDisplay();
                width = display.getWidth();

                return true;
            case MotionEvent.ACTION_UP:
                 count = 0;
                if (initialTouchX < width / 2) {
                    initialTouchX = 0;
                } else if (initialTouchX >= width / 2) {
                    initialTouchX = width;
                }
                return true;
            }
            return false;
        }
    });

}

@Override
public void onDestroy() {
    super.onDestroy();
    if (chatHead != null)
        windowManager.removeView(chatHead);
}
  }
公共类ChadHead扩展服务{
私有最终处理程序mHandler=新处理程序();
私有可运行mTimer1;
专用WindowManager WindowManager;
私人图像查看聊天室;
显示;
整数宽度;
整数计数=0;
@凌驾
公共IBinder onBind(意向){
//不用
返回null;
}
@凌驾
public void onCreate(){
super.onCreate();
mTimer1=新的可运行(){
@凌驾
公开募捐{
计数++;
//TODO自动生成的方法存根
mHandler.postDelayed(这一数字为5000);
如果(计数=1){
mHandler.removeCallbacks(mTimer1);
//请在此处输入您的代码:
}
}
};
windowManager=(windowManager)getSystemService(窗口服务);
chatHead=新的图像视图(此);
setImageResource(R.drawable.ic_启动器);
final WindowManager.LayoutParams params=新建WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_内容,
WindowManager.LayoutParams.WRAP_内容,
WindowManager.LayoutParams.TYPE_电话,
WindowManager.LayoutParams.FLAG\u不可聚焦,
像素格式(半透明);
params.gravity=gravity.TOP | gravity.LEFT;
参数x=0;
参数y=100;
windowManager.addView(聊天头,参数);
setOnTouchListener(新视图.OnTouchListener(){
私有int initialX;
私有int初始值;
私有浮点数;
私家侦探敏感;
@抑制警告(“弃用”)
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
initialX=参数x;
初始值y=参数y;
initialTouchX=event.getRawX();
initialTouchY=event.getRawY();
mHandler.postDelayed(mTimer1,0);
/*意图一;
PackageManager=getPackageManager();
试一试{
i=manager.getLaunchIntentForPackage(“com.technorapper.technorapperApp”);
如果(i==null)
抛出新的PackageManager.NameNotFoundException();
i、 addCategory(意图.类别\发射器);
星触觉(i);
}捕获(PackageManager.NameNotFounde异常){
}*/
Toast.makeText(getApplicationContext(),“TechnoRapper”,50)
.show();
返回true;
case MotionEvent.ACTION\u移动:
参数x=初始值x
+(int)(event.getRawX()-initialTouchX);
参数y=初始值y
+(int)(event.getRawY()-initialTouchY);
windowManager.UpdateView布局(聊天头、参数);
display=windowManager.getDefaultDisplay();
宽度=display.getWidth();
返回true;
case MotionEvent.ACTION\u UP:
计数=0;
如果(初始接触X<宽度/2){
初始接触x=0;
}否则如果(initialTouchX>=宽度/2){
initialTouchX=宽度;
}
返回true;
}
返回false;
}
});
}
@凌驾
公共空间{
super.ondestory();
if(聊天头!=null)
windowManager.removeView(聊天头);
}
}

如果您想要自定义持续时间,您必须自己编程

但是,建议使用android内置功能。
有a和a可区分单击视图的两种不同持续时间。

如果您想要自定义持续时间,您必须自己编程

但是,建议使用android内置功能。
有a和a来区分单击视图的两种不同持续时间。

我不能告诉您完整的代码,但我可以在这里解释流程,我从您的回答中得到的是,您需要在上次按下按钮的基础上执行不同的操作,这就是您可以执行的操作。您需要两个日期变量,即current和lastTime

  DateTimeUtils.getCurrentUTCFormattedDateTime()
将lastTime存储在操作时的首选项中从首选项中获取最后一次,然后获取当前时间并将其减去,以获得差值

  long difference = (current.getTime() - lastSaved.getTime()) / 1000;

给你以秒为单位的时差,然后你决定做什么。希望有帮助:)

我不能告诉你完整的代码,但我可以在这里解释流程,我从你的回答中得到的是,你需要根据上次按下按钮的时间做不同的操作,这就是你可以做的。您需要两个日期变量,即current和lastTime

  DateTimeUtils.getCurrentUTCFormattedDateTime()
将lastTime存储在操作时的首选项中从首选项中获取最后一次,然后获取当前时间并将其减去,以获得差值

  long difference = (current.getTime() - lastSaved.getTime()) / 1000;
给你以秒为单位的时差,然后你决定做什么。希望有帮助:)

您可以使用和两个时间戳来存储按钮单击开始(操作向下)和结束时间(操作向上)。然后,这两个变量(end start)之间的差异将告诉您按钮单击时间的持续时间,您可以根据自己的偏好执行代码

test.setOnTouchListener(new OnTouchListener() {
    private long start = 0;
    private long end = 0;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction()==MotionEvent.ACTION_DOWN) {
            this.start = System.currentTimeMillis();
        } else if (event.getaction()==MotionEvent.ACTION_UP) {
            this.end = System.currentTimeMillis();
        }
    }
});
您可以使用和两个时间戳来存储按钮单击开始(操作_