티스토리 뷰
반응형
서버쪽에서 등록한 이미지를 Api 로 받고 쇼핑몰 광고 배너처럼 자동 슬라이드 될 수 있도록 해보자
* activity_brand (Layout)
<RelativeLayout
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<AdapterViewFlipper
android:id="@+id/avf_banner"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="100dp"/>
</RelativeLayout>
* Retrofit2 : ClientClass, ServiceClass 만들기(코드 생략)
* BannerResponse & Banner (api model)
public class BannerResponse {
private List<Banner> result;
public List<Banner> getResult() {
return result;
}
public void setResult(List<Banner> result) {
this.result = result;
}
public static class Banner {
private int id;
private String image;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
}
* item_banner
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/iv_banner"
android:layout_width="match_parent"
android:layout_height="100dp"/>
</android.support.constraint.ConstraintLayout>
* BannerFlipperAdapter
public class BannerFlipperAdapter extends BaseAdapter {
private Context mContext;
private List<BannerResponse.Banner> mItemList;
public BrandFlipperAdapter(Context context, List<AdsResponse.Ads> itemList) {
this.mContext = context;
this.mItemList = itemList;
}
@Override
public int getCount() {
return mItemList.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
BannerResponse.Banner banner = mItemList.get(i);
View v = LayoutInflater.from(context).inflate(R.layout.item_banner, null);
ImageView imageView = v.findViewById(R.id.iv_banner);
Glide.with(context).load(banner.getImage()).into(imageView);
return v;
}
}
* BannerActivity (Activity)
- setFlipInterval : 슬라이드 속도
- setAutoStart : 자동 슬라이드 on/off
- setIn/OutAnimation : 애니메이션 효과
public class BannerActivity extends AppCompatActivity {
private AdapterViewFlipper adapterViewFlipper;
private ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_brand);
initViews();
remoteBanner();
}
private void initViews() {
adapterViewFlipper = findViewById(R.id.avf_banner);
apiService = ApiClient.getClient().create(ApiService.class);
}
private void remoteBanner() {
apiService.getBanner("param").enqueue(new Callback<BannerResponse>() {
@Override
public void onResponse(Call<BannerResponse> call, Response<BannerResponse> response) {
if (response.body() != null) {
List<BannerResponse.Banner> bannerList = response.body().getResult();
adapterViewFlipper.setAdapter(new BrandFlipperAdapter(getApplicationContext(), bannerList));
adapterViewFlipper.setFlipInterval(2000);
adapterViewFlipper.setAutoStart(true);
adapterViewFlipper.setInAnimation(getApplicationContext(), R.animator.banner_left_in);
adapterViewFlipper.setOutAnimation(getApplicationContext(), R.animator.banner_right_out);
adapterViewFlipper.startFlipping();
}
}
@Override
public void onFailure(Call<BannerResponse> call, Throwable t) {
Log.d(TAG, t.toString());
}
});
}
}
* AdapterViewFlipper 에 애니메이션을 적용하려면 'anim' 이 아닌 'animator' 폴더를 생성해야함
- left_in (왼쪽에서 들어와서)
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1500"
android:valueTo="0"
android:duration="600"/>
- right_out (오른쪽으로 나감)
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="1500"
android:duration="600"/>
참고 - Stack Overflow
반응형
'Android' 카테고리의 다른 글
[Android] Jetpack Room 사용법(1) (LiveData 사용 안 할 때) (0) | 2020.12.02 |
---|---|
[Android] Retrofit2 POST 방법(@Part, @Field, @Body, @Multipart, @FormUrlEncoded) (0) | 2020.11.25 |
Collection Framework (0) | 2020.11.25 |
[Android] Broadcast Receiver 를 이용한 App 자동 실행(전원이 켜질때) (0) | 2020.10.19 |
[Android] Circular ProgressBar 설정 (0) | 2020.10.19 |
댓글