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