[英]How do i make 1 button play random sounds each time i press the button using android studio
[英]how to count button press time in android?
我正在開發一個項目,在該項目中,我想在不同的時間執行不同的任務,例如如果用戶在5毫秒后按下按鈕,則執行代碼;如果按下時間大於該時間,則需要進行差異
實際上是像在Facebook聊天中一樣創建聊天頭
問題是在ActionDown事件上我想打開或啟動我的應用程序
但是問題是,當用戶嘗試將聊天頭從一個位置重新分配到其他位置時,會觸發類似
This is my code
我想在ACTION_DOWN事件中使用該應用
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);
}
}
您可以使用View.OnTouchListener和兩個時間戳來存儲按鈕單擊的開始時間(ACTION_DOWN)和結束時間(ACTION_UP)。 然后,這兩個變量之間的差異(結束-開始)將告訴您按鈕單擊時間的持續時間,並且您可以根據自己的喜好執行代碼。
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();
}
}
});
自3個月前以來我就遇到了,這是我的解決方案:
private int count = 0;
Button btn;
private final Handler mHandler = new Handler();
private Runnable mTimer1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
mTimer1 = new Runnable() {
@Override
public void run() {
count++;
// TODO Auto-generated method stub
mHandler.postDelayed(this, 500);
if (count == 1) {
mHandler.removeCallbacks(mTimer1);
// put your code here:
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) {
}
}
}
};
btn.setOnTouchListener(new OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = (int) btn.getX();
initialY = (int) btn.getY();
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
mHandler.postDelayed(mTimer1, 0);
return true;
case MotionEvent.ACTION_UP:
count = 0;
return true;
case MotionEvent.ACTION_MOVE:
runOnUiThread(new Runnable() {
public void run() {
btn.setX(initialX
+ (int) (event.getRawX() - initialTouchX));
btn.setY(initialY
+ (int) (event.getRawY() - initialTouchY));
}
});
return true;
}
return false;
}
});
使用此代碼,您可以移動聊天頭,事件將在500毫秒后開始。 無需使用OnClickListener,檢查位置是否不變,因此將其檢測為OnClickListener。
如果您想在捕獲某些動作時停止OnTouch事件,只需在ACTION_MOVE中放入“布爾變量”
如果您想要自定義持續時間,則必須自己進行編程。
但是,建議使用android內置函數。 有一個View.OnLongClickListener和View.OnClickListener來區分單擊視圖的兩個不同的持續時間。
我無法告訴您完整的確切代碼,但我可以在這里解釋流程,我從您的回答中得到的是,您需要在上次按下按鈕的基礎上執行不同的操作,這就是您可以執行的操作。 您需要兩個Date變量,即current和lastTime
DateTimeUtils.getCurrentUTCFormattedDateTime()
將lastTime存儲在操作中的首選項中,從首選項中獲取最后一個時間,並獲取當前時間並將其減去,以獲得差值。
long difference = (current.getTime() - lastSaved.getTime()) / 1000;
給您以秒為單位的時差,然后您決定要做什么。 希望對您有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.