onClick 함수 중에 for 루프 내에서 ImageView 이미지를 여러 번 변경 하시겠습니까?

RBS

지금까지 onClick 함수 내에서 이미지를 변경하면 onClick 함수가 종료 될 때까지 이미지가 변경되지 않습니다. onClick 기능 중에 이미지를 여러 번 변경하는 방법이 있습니까? 내가하고 싶은 것은 on Click (예 : LetterS 등) 내의 각 함수 호출에서 이미지가 변경되는 것입니다. 아래 코드 참조 ...

MainActivity :

imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (isflash) {
                    LetterS();
                    LetterO();
                    LetterS();
                    imageButton.setImageResource(R.drawable.sos_btn);

                } else {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setTitle("Message...");
                    builder.setMessage("Flashlight is NOT Available on this device...");
                    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            finish();
                        }
                    });
                    AlertDialog alertDialog = builder.create();
                    alertDialog.show();
                }
            }
        });
    }

    public void LetterS() {
        imageButton.setImageResource(R.drawable.ltr_s);
        for (int l = 1; l <= 3; l += 1) {
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(parameters);
            camera.startPreview();
            // We make the thread sleeping
            android.os.SystemClock.sleep(300);

            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(parameters);
            camera.stopPreview();
            // We make the thread sleeping
            android.os.SystemClock.sleep(200);
        }
        android.os.SystemClock.sleep(300);
    }

    public void LetterO() {
        imageButton.setImageResource(R.drawable.ltr_o);
        for (int l = 1; l <= 3; l += 1) {
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(parameters);
            camera.startPreview();
            // We make the thread sleeping
            android.os.SystemClock.sleep(1000);

            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(parameters);
            camera.stopPreview();
            // We make the thread sleeping
            android.os.SystemClock.sleep(200);
        }
        android.os.SystemClock.sleep(500);
    }

마르신 제 디낙

SystemClock#sleep(long)메인 스레드 (UI 스레드라고도 함)에서 사용해서는 안됩니다 . 이것은 사용자와의 모든 상호 작용을 처리하는 동일한 스레드입니다. 이 스레드를 차단하면 사용자는 앱에서 어떤 작업도 수행 할 수 없습니다.

대신 같은 방법을 사용할 수 있습니다 View#post(Runnable), View#postDelayed(Runnable, long), Handler#post(Runnable)또는 Handler#postDelayed(Runnable, long)나중에 수행 할 작업을 예약에 있습니다.

문제의 더 간단한 하위 집합에 대해 이러한 방법을 사용하는 방법을 보여 드리겠습니다. ImageButton이 있고 사용자가 버튼을 클릭 한 후 사용자에게 이미지 집합을 순차적으로 표시하려고합니다 (단순함을 위해 손전등을 무시 함).

300 밀리 초마다 이미지가 변경되기를 원한다고 가정 해 보겠습니다.

private static final long IMAGE_UPDATE_DELAY_MILLIS = 300;

그리고 다음과 같은 드로어 블 리소스 세트가 있습니다.

private static final int[] ALL_DRAWABLE_RES = new int[] {
    R.drawable.ltr_s,
    R.drawable.ltr_o,
    R.drawable.ltr_s
};

마지막으로 우리가 사용할 몇 가지 다른 필드가 필요합니다.

private int currentDrawableResIndex;
private ImageButton imageButton;
private Runnable updateImageTask;

우리에서 onCreate우리는 우리의 필드를 초기화하려고 :

updateImageTask = new UpdateImageTask();

imageButton = (ImageButton) findViewById(R.id.image_button);
imageButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        currentDrawableResIndex = 0;
        imageButton.setImageResource(ALL_DRAWABLE_RES[0]);
        imageButton.removeCallbacks(updateImageTask);
        imageButton.postDelayed(updateImageTask, IMAGE_UPDATE_DELAY_MILLIS);
    }
}

우리는 UpdateImageTask잠시 후에 구현할 것 입니다. 그것은 일을하는 것이 될 것 Runnable입니다. 에서 onClick우리는 단지 진행중인 작업을 취소하고 이상 전체 프로세스를 시작합니다. 우리는 RunnableUI 스레드의 "메시지 큐"에 게시하고 나중에 실행됩니다.

우리에서 onStop우리는 프로세스를 취소 할 수도려고하지 않습니다 - 활동은 더 이상 보이지 사용자에게 있습니다.

imageButton.setImageResource(R.drawable.my_default_drawable);
imageButton.removeCallbacks(updateImageTask);

마지막으로 다음이 있습니다 Runnable.

private class UpdateImageTask implements Runnable {
    @Override
    public void run() {
        currentDrawableResIndex++;

        if (currentDrawableResIndex < ALL_DRAWABLE_RES.length) {
            imageButton.setImageResource(ALL_DRAWABLE_RES[currentDrawableResIndex]);
            imageButton.postDelayed(this, IMAGE_UPDATE_DELAY_MILLIS);
        } else {
            imageButton.setImageResource(R.drawable.my_default_drawable);
        }
    }
}

따라서 Runnable표시 할 이미지가 더 있으면 간단히 다시 게시하고 완료 한 후에 정리합니다.

비슷한 방법으로 코드에 손전등 깜박임을 포함 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

for-next의 모든 루프에서 변수를 변경 하시겠습니까?

분류에서Dev

Matplotlib, 한 번에 여러 매개 변수를 설정 하시겠습니까?

분류에서Dev

매끄러운 루프를 사용하여 bxSlider 캐 러셀의 활성 이미지를 수평으로 중앙에 배치 하시겠습니까?

분류에서Dev

R의 for 루프에서 이름을 변경하여 여러 함수 만들기

분류에서Dev

for 루프에서 변수 값을 변경 하시겠습니까?

분류에서Dev

루프 내에서 while 루프 테스트에서 bash 변수를 업데이트 하시겠습니까?

분류에서Dev

ImageView onClick에서 이미지 변경

분류에서Dev

onclick을 사용하여 함수 내에서 변수 변경

분류에서Dev

루프 결과를 변수에 저장 하시겠습니까?

분류에서Dev

'For'루프에 변수를 할당 하시겠습니까?

분류에서Dev

while 루프에서 f- 문자열 지역 변수를 변경 하시겠습니까?

분류에서Dev

forEach 루프 내에서 변수 카운터를 지우시겠습니까?

분류에서Dev

하나의 값으로 한 줄에 여러 변수를 한 번에 정의 하시겠습니까?

분류에서Dev

하나의 값으로 한 줄에 여러 변수를 한 번에 정의 하시겠습니까?

분류에서Dev

Adapter의 getView ()에서 imageView를 클릭하여 이미지 변경

분류에서Dev

Pandas에서 열 번호로 여러 열 이름을 변경 하시겠습니까?

분류에서Dev

이 루프 내에서 프롬프트 변수를 한 번만 실행하는 방법이 있습니까?

분류에서Dev

forEach 루프의 컨텍스트 내에서 두 개의 서로 다른 ID를 동시에 변경할 수 있는지 확인 하시겠습니까?

분류에서Dev

내 코드 내에서 함수를 여러 번 호출하고 싶습니까?

분류에서Dev

여러 이미지에 대해 onclick 기능을 수행하기 위해 루프를 사용하는 방법이 있습니까?

분류에서Dev

배경 tkinter 및 PIL에 여러 이미지를 표시 하시겠습니까?

분류에서Dev

쿼리 된 매개 변수를 ColdFusion 파일에 여러 번 전달 하시겠습니까?

분류에서Dev

쿼리 된 매개 변수를 ColdFusion 파일에 여러 번 전달 하시겠습니까?

분류에서Dev

루프에서 여러 번 실행되는 함수에서 지역 변수 덮어 쓰기

분류에서Dev

Android Studio Kotlin에서 문자열 보간을 사용하여 imageView 리소스를 변경 하시겠습니까?

분류에서Dev

R에서 여러 변수의 이상 값을 95 %로 변경하는 루프

분류에서Dev

입력에 따라 함수를 여러 번 실행하는 for / if 루프 :: jquery

분류에서Dev

for 루프에서 변수를 선택기로 사용 하시겠습니까?

분류에서Dev

파이썬 프로그램에서 몇 가지 매개 변수와 함께 사용자 정의 함수를 여러 번 사용할 수 있습니까?

Related 관련 기사

  1. 1

    for-next의 모든 루프에서 변수를 변경 하시겠습니까?

  2. 2

    Matplotlib, 한 번에 여러 매개 변수를 설정 하시겠습니까?

  3. 3

    매끄러운 루프를 사용하여 bxSlider 캐 러셀의 활성 이미지를 수평으로 중앙에 배치 하시겠습니까?

  4. 4

    R의 for 루프에서 이름을 변경하여 여러 함수 만들기

  5. 5

    for 루프에서 변수 값을 변경 하시겠습니까?

  6. 6

    루프 내에서 while 루프 테스트에서 bash 변수를 업데이트 하시겠습니까?

  7. 7

    ImageView onClick에서 이미지 변경

  8. 8

    onclick을 사용하여 함수 내에서 변수 변경

  9. 9

    루프 결과를 변수에 저장 하시겠습니까?

  10. 10

    'For'루프에 변수를 할당 하시겠습니까?

  11. 11

    while 루프에서 f- 문자열 지역 변수를 변경 하시겠습니까?

  12. 12

    forEach 루프 내에서 변수 카운터를 지우시겠습니까?

  13. 13

    하나의 값으로 한 줄에 여러 변수를 한 번에 정의 하시겠습니까?

  14. 14

    하나의 값으로 한 줄에 여러 변수를 한 번에 정의 하시겠습니까?

  15. 15

    Adapter의 getView ()에서 imageView를 클릭하여 이미지 변경

  16. 16

    Pandas에서 열 번호로 여러 열 이름을 변경 하시겠습니까?

  17. 17

    이 루프 내에서 프롬프트 변수를 한 번만 실행하는 방법이 있습니까?

  18. 18

    forEach 루프의 컨텍스트 내에서 두 개의 서로 다른 ID를 동시에 변경할 수 있는지 확인 하시겠습니까?

  19. 19

    내 코드 내에서 함수를 여러 번 호출하고 싶습니까?

  20. 20

    여러 이미지에 대해 onclick 기능을 수행하기 위해 루프를 사용하는 방법이 있습니까?

  21. 21

    배경 tkinter 및 PIL에 여러 이미지를 표시 하시겠습니까?

  22. 22

    쿼리 된 매개 변수를 ColdFusion 파일에 여러 번 전달 하시겠습니까?

  23. 23

    쿼리 된 매개 변수를 ColdFusion 파일에 여러 번 전달 하시겠습니까?

  24. 24

    루프에서 여러 번 실행되는 함수에서 지역 변수 덮어 쓰기

  25. 25

    Android Studio Kotlin에서 문자열 보간을 사용하여 imageView 리소스를 변경 하시겠습니까?

  26. 26

    R에서 여러 변수의 이상 값을 95 %로 변경하는 루프

  27. 27

    입력에 따라 함수를 여러 번 실행하는 for / if 루프 :: jquery

  28. 28

    for 루프에서 변수를 선택기로 사용 하시겠습니까?

  29. 29

    파이썬 프로그램에서 몇 가지 매개 변수와 함께 사용자 정의 함수를 여러 번 사용할 수 있습니까?

뜨겁다태그

보관