오늘이라도
[Android] 15. ProgressBar, ProgressDialog, SeekBar, 화면 방향 돌리기, 애니메이션 효과 본문
취업성공패키지 SW 개발자 교육/Android
[Android] 15. ProgressBar, ProgressDialog, SeekBar, 화면 방향 돌리기, 애니메이션 효과
upcake_ 2020. 5. 26. 09:44반응형
- ProgressBar, ProgressDialog, SeekBar -
▼activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/progressBar"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="96dp"
android:layout_marginEnd="33dp"
android:layout_marginRight="33dp"
android:text="입력"
android:textSize="24sp" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginStart="81dp"
android:layout_marginLeft="81dp"
android:layout_marginTop="298dp"
android:layout_marginEnd="80dp"
android:layout_marginRight="80dp"
android:layout_toEndOf="@+id/button2"
android:layout_toRightOf="@+id/button2"
android:text="닫기"
android:textSize="24sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginStart="50dp"
android:layout_marginLeft="50dp"
android:layout_marginTop="94dp"
android:text="보여주기"
android:textSize="24sp" />
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/progressBar"
android:layout_marginTop="96dp"
android:layout_marginEnd="55dp"
android:layout_marginRight="55dp"
android:layout_toStartOf="@+id/button1"
android:layout_toLeftOf="@+id/button1"
android:ems="10"
android:hint="0 ~ 100 숫자 입력"
android:inputType="number" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="46dp" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button3"
android:layout_marginTop="43dp" />
</RelativeLayout>
▼MainActivity.java
package com.example.my16_progress;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//객체 선언
ProgressBar progressBar;
EditText editText;
Button button1, button2, button3;
ProgressDialog dialog;
SeekBar seekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//객체 초기화
progressBar = findViewById(R.id.progressBar);
editText = findViewById(R.id.editText);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
button3 = findViewById(R.id.button3);
seekBar = findViewById(R.id.seekBar);
//progressBar 설정
progressBar = findViewById(R.id.progressBar);
progressBar.setIndeterminate(false);
progressBar.setMax(100);
progressBar.setProgress(20);
//버튼에 기능 추가
//버튼 1: 진행도 바
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(editText.getText().toString().length() != 0) {
int value = Integer.parseInt(editText.getText().toString());
if(value > 100) {
value = 100;
}
progressBar.setProgress(value);
} else {
Toast.makeText(MainActivity.this, "숫자를 입력해주세요.", Toast.LENGTH_SHORT);
}
}
});
//버튼 2 : 진행도 다이얼로그
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog = new ProgressDialog(MainActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // 빙글빙글 돌아가게끔 설정
dialog.setMessage("데이터를 확인하는 중입니다...");
dialog.setCanceledOnTouchOutside(false); // 화면 터치시 취소되는 기능을 설정하는 메서드
dialog.show();
}
});
//버튼 3 : 다이얼로그 멈추기
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(dialog != null) {
dialog.dismiss();
}
}
});
//시크바 기능 추가
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//시크바의 진행도가 변경되면 작동하는 메서드
//progress : 진행도
//fromUser : 유저가 직접 변경하면 true, 시스템이 변경했으면 false
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//editText에는 String 타입만 들어가야 하므로 int 타입인 progress를 String 타입으로 캐스팅한다.
//방법 ① : "" + int타입
//editText.setText("" + progress);
//방법 ② : String.valueOf()
editText.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
//값을 변경시키고 손을 뗌
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
//화면이 이미 생성되어 있는 경우에 새 화면을 띄우면 작동
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
}
- 화면 방향 돌리기 ① : 가로 화면을 따로 구성 -
▼activity_main.xml : 세로 화면
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="63dp"
android:layout_marginLeft="63dp"
android:layout_marginTop="91dp"
android:ems="10"
android:inputType="textPersonName"
android:textSize="24sp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:text="확인"
android:textSize="24sp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginStart="58dp"
android:layout_marginLeft="58dp"
android:layout_marginTop="95dp"
android:text="세로 방향(Portrait)"
android:textSize="36sp" />
</RelativeLayout>
- res 우클릭 → New → Android Resource File
- 만들어진 폴더를 확인하는 법
① 프로젝트 도구 창의 좌측 상단 Android를 Project로 변경
② app → src → main → res에서 확인 가능하다.
▼activity_main.xml : 가로 화면
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="225dp"
android:layout_marginLeft="225dp"
android:layout_marginTop="70dp"
android:ems="10"
android:inputType="textPersonName"
android:textSize="24sp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:text="확인"
android:textSize="24sp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="193dp"
android:layout_marginLeft="193dp"
android:layout_marginTop="70dp"
android:text="가로 방향(Landscape)"
android:textSize="36sp" />
</RelativeLayout>
▼MainActivity.java
package com.example.my17_orientation;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//객체 선언
String name;
EditText editText;
Button button1;
//onCreate는 저장된 instanceState를 불러다가 화면을 만든다.
//Bundle : 데이터가 저장된 곳
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showToast("onCreate() 호출됨");
//객체 초기화
editText = findViewById(R.id.editText);
button1 = findViewById(R.id.button1);
//버튼 기능 추가
//누르면 name에 editText의 내용을 가져온다.
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = editText.getText().toString();
showToast("입력된 값을 변수에 저장하였습니다.");
}
});
if(savedInstanceState != null) {
name = savedInstanceState.getString("name");
showToast("값을 복원하였습니다 : " + name);
}
}
//넘겨 받은 문자열을 Toast로 보여주는 메서드
private void showToast(String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
//InstanceState를 저장하는 메서드
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("name", name);
}
@Override
protected void onStart() {
super.onStart();
showToast("onStart() 호출됨");
}
@Override
protected void onStop() {
super.onStop();
showToast("onStop() 호출됨");
}
@Override
protected void onDestroy() {
super.onDestroy();
showToast("onDestroy() 호출됨");
}
}
- 화면 방향 돌리기 ② : onConfigurationChanged로 가로 화면 구현 -
▼activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="63dp"
android:layout_marginLeft="63dp"
android:layout_marginTop="91dp"
android:ems="10"
android:inputType="textPersonName"
android:textSize="24sp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp"
android:text="확인"
android:textSize="24sp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="61dp"
android:layout_marginLeft="61dp"
android:layout_marginTop="22dp"
android:text="세로 방향(Portrait)"
android:textSize="36sp" />
</RelativeLayout>
▼AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.my18_orientation2">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden">
<!--화면이 바뀌었는지, 화면 크기가 바뀌었는지, 키보드가 사라지게 되었는지 확인-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
▼MainActivity.java
package com.example.my18_orientation2;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//객체 선언
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//객체 초기화
textView = findViewById(R.id.textView);
}
//manifest에서 설정한 config중에 무언가가 바뀌면 작동하는 메서드
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//방향이 가로 방항으로 바뀌었으면 토스트를 띄우고 가로 방향으로 메세지를 바꿈
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
showToast("방향 : Landscape");
textView.setText("가로 방향(Landscape)");
//또는 방향이 세로 방향으로 바뀌었으면 토스트를 띄움
} else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
showToast("방향 : Portrait");
textView.setText("세로 방향(Portrait)");
}
}
//넘겨 받은 문자열을 Toast로 보여주는 메서드
private void showToast(String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}
- 애니메이션 효과 -
▼activity_main.xml
<?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">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#3F51B5"
android:gravity="center_vertical"
android:text="안녕하세요!"
android:textColor="#FFFFFF"
android:textSize="24sp" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="애니메이션 시작"
android:textSize="24sp" />
</LinearLayout>
▼MainActivity.java
package com.example.my19_animation;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//객체 선언
TextView textView;
Button button;
Animation flowAnim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//객체 초기화
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
//Animation 설정
flowAnim = AnimationUtils.loadAnimation(this, R.anim.flow);
//Context 설정할때
//onCreate 내부에서는 this가 가능하고
//외부에서는 ~~.this나 getApplicationContext()를 사용한다.
//버튼 기능추가
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.startAnimation(flowAnim);
}
});
}
}
- res 우클릭 → New → Android Resource Directory
- anim 우클릭 → Animation Resource File
▼flow.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%"
android:toXDelta="0%"
android:duration="1500"
android:repeatCount="1" />
</set>
반응형
'취업성공패키지 SW 개발자 교육 > Android' 카테고리의 다른 글
[Android] 17. ViewPager / 옵션 메뉴, 액션 바 / 라이브러리 추가, 탭 만들어서 여러 프래그먼트 보기 (0) | 2020.05.28 |
---|---|
[Android] 16. 프래그먼트(Fragment) : 버튼으로 프래그먼트 교체, 프래그먼트의 버튼으로 다른 프래그먼트의 이미지 교체 (0) | 2020.05.27 |
[Android] 14. 터치 좌표 출력(setOnTouchListener), 터치 제스쳐 감지(GestureDetector), 조작키 감지(onKeyDown) (0) | 2020.05.25 |
[Android] 13. SMS 메시지 수신 후 내용 출력 (3) | 2020.05.22 |
[Android] 12. 서비스 (0) | 2020.05.21 |