• 안드로이드 스튜디오 이미지(drawble)와 텍스트뷰(TextView) 매칭시키기

    2021. 1. 4.

    by. 하루플스토리

    반응형

    안녕하세요, 하루플스토리 입니다.

     

    메이플스토리 관련 앱 개발하던 도중 정말 간단한건데 막힌 부분이 있어 공부하다가 결국 성공했습니다..

     

    원하는 이미지와 TextView를 매칭시켜 setText로 출력하는 방법입니다.


     

    우선, 이미지는 레이아웃 xml파일에서 생성하지 않고 java에서 랜덤함수로 생성하였기 때문에 이미지의 레이아웃 id값이 존재하지 않습니다. 그래서 어떻게 TextView와 매칭할지 고민했습니다.

     

    activity_main.xml

    메인 이미지 입니다. 로고 바로 아래 네모칸이 랜덤한 이미지가 들어가는 ImageView 입니다.

     

     

    그 아래 루나 라고 적힌부분과 왼쪽 네모상자도 랜덤한 이미지가 출력되는 부분입니다.

    이런아이콘이 랜덤으로 생성되면 아래 이미지처럼 각 이름과 매칭하려 합니다.


    activity_main.xml

                <!-- 서버 생성 -->
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:orientation="horizontal"
                    android:layout_marginTop="10dp">
    
                    <ImageView
                        android:id="@+id/server_img"
                        android:layout_width="25dp"
                        android:layout_height="25dp"
                        android:layout_marginRight="5dp"/>
    
                    <TextView
                        android:id="@+id/server_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="20dp"
                        android:textColor="#FFFFFF"
                        />
    
                </LinearLayout>

    xml에는 랜덤한 이미지가 출력될 ImageView와 그 이미지에 맞게 출력할 TextView를 구현하였습니다.

     

    각 이미지 파일명은 

    보기 좋게 ico_world_~~~ 로 하였습니다.

     


     

    MainActivity.java

    //랜덤 함수 생성
            final Random rand = new Random();
    
    //앱 실행시 서버 아이콘 랜덤 생성
            final int[] server_ico = {R.drawable.ico_world_arcane, R.drawable.ico_world_aurora, R.drawable.ico_world_bera
                    , R.drawable.ico_world_croa, R.drawable.ico_world_elysium, R.drawable.ico_world_enosis, R.drawable.ico_world_luna
                    , R.drawable.ico_world_nova, R.drawable.ico_world_reboot, R.drawable.ico_world_reboot2, R.drawable.ico_world_red
                    , R.drawable.ico_world_scania, R.drawable.ico_world_union, R.drawable.ico_world_zenith};
            int server_num = rand.nextInt(server_ico.length);
            final ImageView server_img = (ImageView)findViewById(R.id.server_img);
            server_img.setBackgroundResource(server_ico[server_num]);

    MainActivity.java 에서 앱 실행하였을때 서버 아이콘이 랜덤하게 생성되는 코드를 작성했습니다.

    그리고 아래에 if문 작성을 어떻게 할지 고민하다가

     

    if(server_ico[server_num] == R.drawble.서버명){

           server_text.setText("서버명")

    }

     

    으로 하니 드디어 되더군요..

    위 소스코드에서 server_num을 int형으로 받았기 때문에 if문에서도 받아온 사진의 인덱스를 정수형으로 적어줘야하나 고민했는데 그런거 필요없이 그냥 'R.drawble.서버명' 으로 사진과 직접 비교하면 되는거였습니다.

     

    이후 간단히 setText 해주면 끝입니다.

     

    아래는 나머지 소스코드입니다.

     

     

    MainActivity.java

            //서버아이콘과 서버 이름 매칭시키는 소스코드
            final TextView server_text = (TextView)findViewById(R.id.server_text);
    
            if(server_ico[server_num] == R.drawable.ico_world_arcane){
                server_text.setText("아케인");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_aurora){
                server_text.setText("오로라");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_bera){
                server_text.setText("베라");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_elysium){
                server_text.setText("엘리시움");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_enosis){
                server_text.setText("이노시스");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_luna){
                server_text.setText("루나");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_nova){
                server_text.setText("노바");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_reboot){
                server_text.setText("리부트");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_reboot2){
                server_text.setText("리부트2");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_red){
                server_text.setText("레드");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_scania){
                server_text.setText("스카니아");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_union){
                server_text.setText("유니온");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_zenith){
                server_text.setText("제니스");
            }
            else if (server_ico[server_num] == R.drawable.ico_world_croa){
                server_text.setText("크로아");
            }
    

     

    궁금하거나 막혀서 모르는 점 있으면 댓글 남겨주세요!

     

     

     

     

    반응형

    댓글