728x90
이미지 넘겨보기 예제를 해보겠습니다.
1. manifests 추가
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. build.gradle 추가
// ViewPager2
implementation "androidx.viewpager2:viewpager2:1.0.0"
// Glide
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
3. res - layout - item_silder.xml 생성
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageSlider"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
4. res - layout - ibg_fading_edge.xml 생성 : 이미지 모아보기 할 때 하단에 색상 넣어줄려고
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:startColor="@android:color/transparent"
android:endColor="#111111" />
</shape>
5. res - layout - bg_indicator_active.xml 생성 : 선택된 이미지는 다른색상으로 표시해 주려고
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="12dp"
android:height="12dp" />
<solid
android:color="#6200EE" />
</shape>
6. res - layout - bg_indicator_inactive.xml 생성
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="8dp"
android:height="8dp" />
<solid
android:color="#eeeeee" />
</shape>
7. 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">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/sliderViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/viewFadingEdge"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@drawable/bg_fading_edge"
app:layout_constraintBottom_toBottomOf="@id/sliderViewPager" />
<LinearLayout
android:id="@+id/layoutIndicators"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:paddingBottom="8dp"
app:layout_constraintBottom_toBottomOf="@id/viewFadingEdge"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
8. MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private ViewPager2 sliderViewPager;
private LinearLayout layoutIndicator;
private String[] images = new String[] {
"https://cdn.pixabay.com/photo/2019/12/26/10/44/horse-4720178_1280.jpg",
"https://cdn.pixabay.com/photo/2020/11/04/15/29/coffee-beans-5712780_1280.jpg",
"https://cdn.pixabay.com/photo/2020/03/08/21/41/landscape-4913841_1280.jpg",
"https://cdn.pixabay.com/photo/2020/09/02/18/03/girl-5539094_1280.jpg",
"https://cdn.pixabay.com/photo/2014/03/03/16/15/mosque-279015_1280.jpg"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sliderViewPager = findViewById(R.id.sliderViewPager);
layoutIndicator = findViewById(R.id.layoutIndicators);
// viewpager를 사용할 때 이전 혹은 다음페이지를 몇개까지 미리 로딩할지 정하는 함수
sliderViewPager.setOffscreenPageLimit(1);
sliderViewPager.setAdapter(new ImageSliderAdapter(this, images));
sliderViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
setCurrentIndicator(position);
}
});
setupIndicators(images.length);
}
// 사진의 숫자만큼 동그란 점 만들기
private void setupIndicators(int count) {
ImageView[] indicators = new ImageView[count];
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(16, 8, 16, 8);
for (int i = 0; i < indicators.length; i++) {
indicators[i] = new ImageView(this);
indicators[i].setImageDrawable(ContextCompat.getDrawable(this,
R.drawable.bg_indicator_inactive));
indicators[i].setLayoutParams(params);
layoutIndicator.addView(indicators[i]);
}
setCurrentIndicator(0);
}
// 선택된 페이지 색상 다르게 하기
private void setCurrentIndicator(int position) {
int childCount = layoutIndicator.getChildCount();
for (int i = 0; i < childCount; i++) {
ImageView imageView = (ImageView) layoutIndicator.getChildAt(i);
if (i == position) {
imageView.setImageDrawable(ContextCompat.getDrawable(
this,
R.drawable.bg_indicator_active
));
} else {
imageView.setImageDrawable(ContextCompat.getDrawable(
this,
R.drawable.bg_indicator_inactive
));
}
}
}
}
9. ImageSliderAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
public class ImageSliderAdapter extends RecyclerView.Adapter<ImageSliderAdapter.MyViewHolder> {
private Context context;
private String[] sliderImage;
public ImageSliderAdapter(Context context, String[] sliderImage) {
this.context = context;
this.sliderImage = sliderImage;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_slider, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.bindSliderImage(sliderImage[position]);
}
@Override
public int getItemCount() {
return sliderImage.length;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView mImageView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.imageSlider);
}
public void bindSliderImage(String imageURL) {
Glide.with(context)
.load(imageURL)
.into(mImageView);
}
}
}
참고한사이트
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] URL과 DECODE 활용하기 (0) | 2022.02.18 |
---|---|
[JAVA][Android] Intent로 객체 전달하기. (0) | 2022.02.16 |
[JAVA][Android] 안드로이드 Lottie 사용법 (0) | 2022.02.13 |
[JAVA][Android] 꺾은 선 그래프 만들기 (0) | 2022.02.12 |
[JAVA][Android] [안드로이드] Volley+를 이용해서 서버에 파일 업로드하기 (0) | 2022.02.11 |