Android Studio를 활용한 안드로이드 프로그래밍 P349 직접 풀어보기 8-2


실습 8-2 를 다음과 같이 수정하라.

1. "이전 그림" 버튼과 "다음 그림" 버튼 사이에 "현재번호/전체 그림 갯수"를 의미하는 텍스트뷰 표시하기

2. 토스트 메시지를 없애고, 첫 번 째 그림에서 "이전그림"클릭 시 마지막 그림을,

마지막 그림에서 "다음 그림" 클릭 시 첫 번 째 그림을 나오게하기. (텍스트뷰도 갱신되어야함)



*한번 실행 후 프로젝트를 다시 실행할 때 화면이 꺼지거나 오류가 발생하면 AVD를 재부팅 하여 실행해야합니다.


<출력화면>

저는 sd카드의 Pictrues폴더에 그림파일을 7개 넣어두고 시작했습니다.


1. 최초 실행 화면


2. 첫 번째 그림화면에서 "이전 그림" 버튼 출력 후 


3. 맨 마지막 그림화면에서 "다음 그림" 버튼 클릭 후



<activity_main.xml 코드>

사용한 이미지가 총7개이므로 최초의 텍스트뷰의 텍스트를 "1/7"로 설정했습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnPrev"
android:text="이전그림"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1/7"
android:textSize="20sp"
android:id="@+id/textview1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnNext"
android:text="다음그림"
android:layout_weight="1"/>
</LinearLayout>
<com.example.a8_2practice.myPictrueView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myPictureView1"/>
</LinearLayout>


<MainActivity 코드>

문제에서 "현재번호/전체 그림 갯수"를 나타내는 위젯을 텍스트뷰로 나타나게 하라고 한 것을 주의하셔야합니다.

즉, 숫자를 어떻게 텍스트뷰로 표현할까? 


방법1. 계산기 프로그램과 비슷하게 Integer와 toString()함수를 이용한다.

간단하게 TextView형 변수.setText(Integer.toString(int형변수)); 로 작성할 수 있는데

구글링으로 다른 방법을 찾아보다가 아래 방법으로 풀어봤습니다.

일단 정수 CurNum을 Integer 타입으로 캐스팅 해야합니다. (integer와 int 는 다름. integer는 객체)

int CurNum=0;

Integer num=new Integer(CurNum);

이렇게 작성 후 텍스트뷰로 출력할 때 num을 toString()함수로 문자열로 변환 후 출력하면 됩니다.


방법2. int형 변수를 String으로 출력한다.(이 방법 사용)

숫자를 문자열로 변환하고 싶으면 아래와 같이 작성하면 됩니다.

String.valueOf(int형 변수명)


*방법1, 방법2 모두 자바의 문법입니다. (캐스팅 방법)


주의할 것은 배열의 인덱스입니다. 텍스트뷰의 시작은 1부터 시작하지만 배열은 0부터 시작하기 때문입니다.

나머지 코드는 전체코드를 읽어보시면 이해가 쉬울 것 같습니다. 

package com.example.a8_2practice;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;

public class MainActivity extends AppCompatActivity {
Button btnPrev,btnNext;
myPictrueView mypicture;
int curNum=1;
File[] imageFiles;
String imageFname;
TextView textView1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("간단 이미지뷰어");
ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},MODE_PRIVATE);
btnPrev=(Button)findViewById(R.id.btnPrev);
btnNext=(Button)findViewById(R.id.btnNext);
textView1=(TextView)findViewById(R.id.textview1);
mypicture=(myPictrueView)findViewById(R.id.myPictureView1);
imageFiles= new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Pictures").listFiles();
imageFname=imageFiles[0].toString();
mypicture.imagePath=imageFname;
btnPrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(curNum<=1)
{
curNum=imageFiles.length;
imageFname=imageFiles[curNum-1].toString();
mypicture.imagePath=imageFname;
mypicture.invalidate();
textView1.setText(String.valueOf(curNum)+"/"+String.valueOf(imageFiles.length));
//Toast.makeText(getApplicationContext(),"첫번쨰 그립입니다.",Toast.LENGTH_SHORT).show();
}
else
{
curNum--;
imageFname=imageFiles[curNum-1].toString();
mypicture.imagePath=imageFname;
mypicture.invalidate();
textView1.setText(String.valueOf(curNum)+"/"+String.valueOf(imageFiles.length));
}
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(curNum>=imageFiles.length)
{
curNum=1;
imageFname=imageFiles[curNum-1].toString();
mypicture.imagePath=imageFname;
mypicture.invalidate();
textView1.setText(String.valueOf(curNum)+"/"+String.valueOf(imageFiles.length));
//Toast.makeText(getApplicationContext(),"마지막 그림입니다.",Toast.LENGTH_SHORT).show();
}
else {curNum++;
imageFname=imageFiles[curNum-1].toString();
mypicture.imagePath=imageFname;
mypicture.invalidate();}
textView1.setText(String.valueOf(curNum)+"/"+String.valueOf(imageFiles.length));
}
});
}
}







'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 9-2  (0) 2020.06.08
직접 풀어보기 9-1  (0) 2020.06.07
직접 풀어보기 8-1  (0) 2020.05.20
직접 풀어보기 7-3  (0) 2020.05.19
직접 풀어보기 7-2  (4) 2020.05.19

+ Recent posts