그림짝맞추기 앱개발

그림짝맞추기 앱만들기 08 - 다음단계 설정 팝업창 만들기 및 기본설정하기, 팝업창 반투명으로 설정하기, 1단계 성공 시, 다음단계 설정 팝업창 표시하기

두결앱개발 2025. 12. 22. 05:32
반응형
SMALL

안녕하세요~ 두결입니다.

 

지난시간에는  이미 맞춘 그림은 터치가 안되도록 처리하고 처음 시작시 5초간 카운트 다운할때는 모든 이미지 카드의 터치가 안되도록 하였습니다. 그리고,  모든 그림 다 맞추었는지 체크하기까지 해보았습니다.

 

이번시간에는

1단계 성공 시, 다음단계 설정을 위한 팝업창을 띄워보도록 하겠습니다.

 


▣  다음단계 설정 팝업창 만들기 및 기본설정하기

먼저, 1단계 성공시 다음단계 설정 팝업창을 만들어보겠습니다.

 

 

좌측의 프로젝트 속성창에서 오른쪽 버튼!

New->Activity->Empty Views Activity 선택!

 

 

ActivityName은 PopupNextStage라고 하고 Finish!!

 

팝업화면을 띄우는것은 이전에 한 강좌가 있으니 그부분 참고하시길 바랍니다. ^^

https://eun9073.tistory.com/25

 

모바일앱개발 강좌 #07 - 팝업화면이란?, 팝업으로 띄울 화면 생성하기, 버튼 클릭시 팝업화면 띄

안녕하세요~ 두결입니다. 지난시간에는 종료버튼으로 앱을 종료시키는 방법에 대해서 알아보았구요.. 종료시 종료확인 다이얼로그를 띄워보고, 다이얼로그가 뜬상태에서는 외부터치가 안되게

eun9073.tistory.com

 

 

먼저, 팝업화면의 기본설정을 해보겠습니다.

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EdgeToEdge.enable(this);
    
    supportRequestWindowFeature(Window.FEATURE_NO_TITLE); // 타이틀바 없애기
    setContentView(R.layout.activity_popup_next_stage);

 

supportRequestWindowFeature()로 팝업화면의 타이틀바를 없애주고요~

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EdgeToEdge.enable(this);

    supportRequestWindowFeature(Window.FEATURE_NO_TITLE); // 타이틀바 없애기
    setContentView(R.layout.activity_popup_next_stage);

    // 뒤로가기 버튼 막기
    OnBackPressedCallback callback = new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            setEnabled(true); // 뒤로가기 막기
        }
    };
    getOnBackPressedDispatcher().addCallback(this, callback);

 

OnBackPressedCallback으로 뒤로가기 버튼도 막아주겠습니다.

 

@Override
public boolean onTouchEvent(MotionEvent event) {
    // 뷰 바깥영역 터치시 강제로 막음
    if(event.getAction() == MotionEvent.ACTION_OUTSIDE)
    {
        return false;
    }
    return true;
}

 

마지막으로 onTouchEvent()로 뷰 바깥영역 터치시 강제로 막아주었습니다.

 

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="300dp"
    android:layout_height="300dp"
    tools:context=".PopupNextStage">

</androidx.constraintlayout.widget.ConstraintLayout>

 

그리고, activity_popup_next_stage.xml에서

width와 height를 300dp로 설정하였습니다.

 


▣  팝업창 반투명으로 설정하기

팝업창으로 반투명으로 만드는 법도 예전에 했던 강좌에 있으니 

그부분 참고해주시면 됩니다. 

 

https://eun9073.tistory.com/27

 

모바일앱개발 강좌 #09 - style작성 후 새로운 테마작성하기, 투명테마 적용하기, 투명한 팝업화면

안녕하세요~ 두결입니다. 지난시간에는 팝업화면의 타이틀바를 없애고 뒤로가기 버튼을 막고, 뷰 바깥영역 터치시 강제로 막기를 해보았습니다.그리고, 팝업화면에서 버튼을 추가해서 팝업화

eun9073.tistory.com

 

 

 

먼저, style을 하나 추가하구요~

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name = "Theme.AppCompat.PopupTransparent" parent="Theme.AppCompat.Dialog">
        <item name ="android:windowIsTranslucent"> true </item>
        <item name="android:windowBackground"> #55E2F0D9 </item>
    </style>           
</resources>

 

위와같이 투명속성과 배경색을 지정해줍니다.

 

<activity
    android:name=".PopupNextStage"
    android:exported="false"
    android:theme="@style/Theme.AppCompat.PopupTransparent"/>
<activity
    android:name=".MainActivity"
    android:exported="true">

다음으로 AndroidManifest.xml에서

금방 만든 Transparent 테마를 설정해줍니다.

 

 


▣  1단계 성공 시, 다음단계 설정 팝업창 표시하기

이제, 이렇게 만든 팝업화면을 1단계 성공 시, 띄워보도록 하겠습니다.

 

// 같은그림인지 체크해주는 함수
private void CheckSameImage(ImageView imgvFirst, int nFirstID, int nFirstPos,
                            ImageView imgvSecond, int nSecondID, int nSecondPos)
{
    if(nFirstID == nSecondID)
    {
        bPairOK[nFirstPos]= true;
        bPairOK[nSecondPos]= true;

        // 모든 그림을 찾았는지 체크
        bNotFindAllPair = false;
        for(int i=0;i<nCurImageCount;i++)
        {
            if(!bPairOK[i])
            {
                bNotFindAllPair = true;
            }
        }

        if(!bNotFindAllPair)
        {
            Toast.makeText(getApplicationContext(),"1단계 성공!!",Toast.LENGTH_SHORT).show();
            bGameStart =false;
        }
    }
    else
    {
        FlipCardAnimation(imgvFirst);
        FlipCardAnimation(imgvSecond);
    }
}

 

이부분은 지난시간에 한 같은 그림인지 체크해주는 함수인데요~

여기에서 모든 이미지 짝을 찾으면 "1단계 성공!" 메세지를 띄웠었습니다.

 

이제 이 메세지 대신에 팝업창을 띄워주면 됩니다.

 

if(!bNotFindAllPair)
{
    ShowPopupNextStage(); // 다음단계 설정 팝업창 띄우기
    bGameStart =false;
}

 

위와같이  메세지 대신에 ShowPopupNextStage()란 함수를 호출하였습니다.

 

// 다음단계 설정 팝업창 띄우는 함수.
private void ShowPopupNextStage()
{
    Intent intent = new Intent(getApplicationContext(), PopupNextStage.class);
    mStartForResult.launch(intent);
}

ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == RESULT_OK) {
                Intent intent = result.getData();
                int nResult = intent.getIntExtra("popup_result", 0);

                // 팝업화면의 결과 상태에 따른 처리
            }
        }
);

 

ShowPopupNextStage()함수에서는

intent를 이용해서 Popup화면을 띄워주고 팝업화면의 결과값을 받는 ActivityResultLauncher까지 작성하였습니다.

 

여기까지 잘 실행이 되는지 한번 보겠습니다.

 

네 1단계 4개 그림을 모두 맞추었을때 위와같이

반투명 팝업창이 잘 표시가 되네요..^^

 

 

네 이번시간은 여기까지만 하도록 하구요~

 

다음시간에는 저 팝업창에 1단계 성공 메세지도 띄워보고 

"닫기"버튼과 "다음단계" 버튼도 추가해보도록 하겠습니다.

 

그럼, 이만~

 

감사합니다. ^^

반응형
LIST