-
Glide로 서버에서 이미지를 받아 MenuItem의 아이콘 변경하기 (비트맵으로 변경하기)Dev/android 2020. 1. 14. 16:06
서버에서 이미지를 받아 ImageView에 적용하려면? Glide를 사용하면 쉽게 된다.
그런데 MenuItem에 넣으려면?
MenuItem의 setIcon()은 Drawable을 받는다.
따라서 우리는 glide에서 받아온 이미지를 bitmap 타입에서 drawable 타입으로 변경해야 한다.
아래는 MenuItem에 버튼 만들기 예제이다.
안드로이드 새로운 프로젝트를 만든다.
이 예제에선 Navigation Drawer Activity 를 선택.
이렇게 우측 상단 메뉴 아이템을 누르면 Settings 라는 서브 메뉴가 나온다.
이제 메뉴아이템의 아이콘을 변경해보자
메뉴아이템은 res/menu/main.xml 에서 설정한다.
이미 되어있는 코드를 지우고
12345678910<?xml version="1.0" encoding="utf-8"?><itemandroid:id="@+id/menuIcon"android:title=""android:icon="@drawable/ic_menu_camera"app:showAsAction="ifRoom" /></menu>이렇게 넣어보자
icon 이미지는 귀찮아서 drawable의 기본 이미지 ic_menu_camera로 변경.
메뉴에 카메라 버튼이 생긴 것을 확인 할 수 있다.
이 카메라 버튼을 서버에서 받아온 이미지로 교체해보자.
Glide 사용 전에 app 단 gradle에 추가한다.
dependencies { implementation ("com.github.bumptech.glide:glide:4.11.0") { exclude group: "com.android.support" } }
Manifest에 인터넷 퍼미션도 추가한다.
<uses-permission android:name="android.permission.INTERNET"/>
이제 MainActivity에 onPrepareOptionsMenu() 를 Override 한 뒤 메소드 내부에 다음과 같이 작성한다.
(glide 버전 4.8.0 이하인 경우)
123456789101112@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {final MenuItem menuItem = menu.findItem(R.id.menuIcon);Glide.with(getApplicationContext()).asBitmap().load("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png").into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {menuItem.setIcon(new BitmapDrawable(getResources(), resource));}});return super.onPrepareOptionsMenu(menu);}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs (glide 버전 4.9.0 이상인 경우)
123456789101112Glide.with(this).asBitmap().into(new CustomTarget<Bitmap>() {@Overridepublic void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {menuItem.setIcon(new BitmapDrawable(getResources(), resource));}@Overridepublic void onLoadCleared(@Nullable Drawable placeholder) {}});http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs 여기 load에 들어가 있는 url은 구글 로고이미지이다.
다음과 같이 작성하면
상단 버튼의 이미지가 카메라에서 구글 로고로 변경 됨을 확인 할 수 있다.
'Dev > android' 카테고리의 다른 글
Sticky Header Recyclerview using ItemDecoration without library - 2 (Kotlin) (3) 2020.05.27 Sticky Header Recyclerview using ItemDecoration without library - 1 (Kotlin) (0) 2020.05.26 ImageView에서 background 와 src 의 차이 (0) 2019.12.16 OS버전 별 변경점 (0) 2019.08.16 안드로이드 웹뷰에서 로그인 세션 유지하기 (1) 2019.05.09