안드로이드의 지연은 어떻게 설정하나요?
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.rollDice:
Random ranNum = new Random();
int number = ranNum.nextInt(6) + 1;
diceNum.setText(""+number);
sum = sum + number;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
int value =(Integer)buttons[i][j].getTag();
if(value==sum){
inew=i;
jnew=j;
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
//I want to insert a delay here
buttons[inew][jnew].setBackgroundColor(Color.WHITE);
break;
}
}
}
break;
}
}
배경 변경 사이의 명령어 지연을 설정하고 싶다.나는 스레드 타이머를 사용해 보고 런앤캐치를 사용해 보았다.근데 안 되네.이거 먹어봤어
Thread timer = new Thread() {
public void run(){
try {
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
timer.start();
buttons[inew][jnew].setBackgroundColor(Color.WHITE);
하지만 검정색으로 바뀌기만 하고 있어요.
다음 코드를 사용해 보십시오.
import android.os.Handler;
...
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 5s = 5000ms
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
}
}, 5000);
사용할 수 있습니다.CountDownTimer
이는 게시된 다른 솔루션보다 훨씬 더 효율적입니다.또한 다음 명령을 사용하여 중간 간격으로 정기적인 알림을 생성할 수도 있습니다.onTick(long)
방법
이 예에서는 30초 카운트다운을 보여 줍니다.
new CountDownTimer(30000, 1000) {
public void onFinish() {
// When timer is finished
// Execute your code here
}
public void onTick(long millisUntilFinished) {
// millisUntilFinished The amount of time until finished.
}
}.start();
앱에서 지연을 자주 사용하는 경우 이 유틸리티 클래스를 사용하십시오.
import android.os.Handler;
public class Utils {
// Delay mechanism
public interface DelayCallback{
void afterDelay();
}
public static void delay(int secs, final DelayCallback delayCallback){
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
delayCallback.afterDelay();
}
}, secs * 1000); // afterDelay will be executed after (secs*1000) milliseconds.
}
}
사용방법:
// Call this method directly from java file
int secs = 2; // Delay in seconds
Utils.delay(secs, new Utils.DelayCallback() {
@Override
public void afterDelay() {
// Do something after delay
}
});
사용방법Thread.sleep(millis)
방법.
UI에서 정기적으로 작업을 수행하려면 CountDownTimer를 사용하는 것이 좋습니다.
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
핸들러 응답(Kotlin):
1-파일(예를 들어 여러분들의 모든 최상위 기능이 포함된 파일)안에 있는 최상위 함수 만들기:.
fun delayFunction(function: ()-> Unit, delay: Long) {
Handler().postDelayed(function, delay)
}
2-그럼 어느 곳에서든지 그것이 필요했죠를.
delayFunction({ myDelayedFunction() }, 300)
이 사용할 수 있습니다.
import java.util.Timer;
그리고 지연 자체에:을 더한다.
new Timer().schedule(
new TimerTask(){
@Override
public void run(){
//if you need some code to run when the delay expires
}
}, delay);
는delay
가변 밀리초 단위로;예 집합을 위한 것이다.delay
려면 50005-second다
여기서 다른 사람으로부터 한에는 2실링 6팬스의 인지 fadein 이 두가지 방법-원래의 이미지의 2초씩 소멸로 2이미지로 2두번째 알파 페이드 지연과 배경 이미지 바뀐 예가 있습니다.
public void fadeImageFunction(View view) {
backgroundImage = (ImageView) findViewById(R.id.imageViewBackground);
backgroundImage.animate().alpha(0f).setDuration(2000);
// A new thread with a 2-second delay before changing the background image
new Timer().schedule(
new TimerTask(){
@Override
public void run(){
// you cannot touch the UI from another thread. This thread now calls a function on the main thread
changeBackgroundImage();
}
}, 2000);
}
// this function runs on the main ui thread
private void changeBackgroundImage(){
runOnUiThread(new Runnable() {
@Override
public void run() {
backgroundImage = (ImageView) findViewById(R.id.imageViewBackground);
backgroundImage.setImageResource(R.drawable.supes);
backgroundImage.animate().alpha(1f).setDuration(2000);
}
});
}
나는 이 가장 안정적이고 가장 유용한 방식으로 2020년으로 쉬운 방법을 이용하는 것 같습니다delay
Runnable이 아닌 Coroutines의 함수입니다.Coroutines는 비동기 작업과 그 작업을 처리하는 데 좋은 개념입니다.delay
구성 요소가 될 것이다 이 대답의 초점을 맞추고 있다.
경고:Coroutines고 코틀린에 코드를 변환하지 않고 있다고 했지만 제 생각엔 모든 사람들이 주요 concept. 이해할 수 있어요 코틀린언어가 필요합니다.
당신의에 Coroutines을 첨가한다.build.gradle
:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
당신이 그것에 있는 coroutines를 사용할 것이다 너의 반(활동, 조각 또는 무언가를):직업을 넣으세요.
private var job: Job = Job()
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job
그리고, 그건 아무것도 수업 시간에 launch{}몸을 사용하여 Coroutines 사용할 수 있다.코드를 다음과 같이 쓸 수 있습니다.
public void onClick(View v) {
launch {
switch(v.getId()) {
case R . id . rollDice :
Random ranNum = new Random();
int number = ranNum . nextInt (6) + 1;
diceNum.setText("" + number);
sum = sum + number;
for (i= 0;i < 8;i++){
for (j= 0;j < 8;j++){
int value =(Integer) buttons [i][j].getTag();
if (value == sum) {
inew = i;
jnew = j;
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
delay(2000)
buttons[inew][jnew].setBackgroundColor(Color.WHITE);
break;
}
}
}
break;
}
}
}
이게 다...
잊지 마세요launch{}
함수는 비동기이며 for 루프는 대기하지 않습니다.delay
다음과 같이 쓰면 종료되는 함수:
launch{
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
delay(2000)
buttons[inew][jnew].setBackgroundColor(Color.WHITE);
}
그렇게,launch{ }
모든 for 루프가 대기하도록 하려면 for 루프를 커버해야 합니다.delay
.
또 다른 장점launch{ }
for 루프를 비동기화하는 것입니다.즉, 부하가 높은 프로세스에서는 애플리케이션의 메인 UI 스레드가 차단되지 않습니다.
package com.viraj.myamppractice;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;
public class Question6 extends AppCompatActivity {
TextView diceop;
Button roll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_question6);
roll = findViewById(R.id.rollButton);
diceop = findViewById(R.id.opDice);
Thread timer = new Thread(){
@Override
public void run() {
try {
Thread.sleep(5000);
Random no = new Random();
int number = no.nextInt(6)+1;
String str = String.valueOf(number);
diceop.setText(str);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
roll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer.run();
}
});
}
}
언급URL : https://stackoverflow.com/questions/15874117/how-to-set-delay-in-android
'programing' 카테고리의 다른 글
vue.js에서 컴포넌트의 폭을 찾는 방법 (0) | 2022.08.28 |
---|---|
vuejs - 구성 요소를 변수에 저장합니다. (0) | 2022.08.28 |
Vuex commit : JSON 순환 구조 오류 (0) | 2022.08.27 |
v-for 메서드에서 쉼표로 구분된 문자열 분할 (0) | 2022.08.27 |
v-for 목록의 show element:VueJS (0) | 2022.08.27 |