앱 실행시 가장 먼저 접하게 되는 로딩화면 예제를 구현해보자.
레이아웃 구현
- dialog_custom.xml (생성)
: 따라할 때 오류 안뜨도록 기본 안드로이드 이미지 사용
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
- activity_main.xml
: 버튼을 생성하여 버튼 클릭 시 로딩화면 나타나도록 한다.
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="load!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
- loading.xml
: res에 anim 디렉터리 만들고 loading.xml 파일 생성
=> 이미지가 회전하도록 설정하는 파일
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="400"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:toXScale="-1.0"
android:toYScale="1.0" />
</set>
액티비티 구현
- CustomAnimationDialog.java (생성)
package com.example.example_loading;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import androidx.annotation.NonNull;
public class CustomAnimationDialog extends Dialog {
private Context c;
private ImageView img_logo;
public CustomAnimationDialog(@NonNull Context context) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE); // 로딩화면에 불필요한 Bar들이 있으면 안되니까 TitleBar 없애기
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setCanceledOnTouchOutside(false);
c = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_custom);
img_logo = (ImageView) findViewById(R.id.img_android);
Animation anim = AnimationUtils.loadAnimation(c, R.anim.loading);
img_logo.setAnimation(anim);
}
@Override
public void show() {
super.show();
}
@Override
public void dismiss() {
super.dismiss();
}
}
- MainActivity.java
package com.example.example_loading;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private CustomAnimationDialog mCustomAnimationDialog;
private Button btn_Load;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.initView();
}
private void initView() {
btn_Load = (Button) findViewById(R.id.btn_load);
btn_Load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCustomAnimationDialog = new CustomAnimationDialog(MainActivity.this);
mCustomAnimationDialog.show();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
mCustomAnimationDialog.dismiss();
}
}
(결과화면 GIF 띄우고 싶은데 할줄 모름..)
끝
'앱 개발 > 안드로이드(Java)' 카테고리의 다른 글
GPS Background service 구현하기 (1) | 2021.10.27 |
---|---|
glide를 사용하여 GIF 로딩 화면 구현하기 (4) | 2021.08.17 |
ViewPager2와 Fragment 예제 (0) | 2021.08.16 |
RecyclerView ScrollBar 설정 (0) | 2021.07.10 |
RecyclerView 아이템 클릭 리스너 구현하기 (0) | 2021.06.17 |