[Java] Navigator 이용한 Photos SlideShow App
📌 개요
Navigation목록에 Slideshow를 클릭하면 저장된 사진들을 마우스 이벤트에 따라 SlideShow로 보여주며, 사용자가 입력한 번호에 따라 사진을 보여주기도 하는 Slideshow Application이다.
📌 실행 동영상
📌 기능
Home
- 바로가기 버튼인 NavigationDrawer을 누르면 프로필과 메뉴 2가지가 뜬다.
SlideShow
- 입력창에 1~30의 번호만을 입력할 수 있으며, 그에 맞는 이미지를 이동시켜 보여준다.
- 1~30외 번호를 입력 시 경고 팝업 메세지가 뜬다.
- 사진 이동시 입력창의 번호도 변경된다.
- 오른쪽/왼쪽으로 마우스 드래그로 사진이동이 가능하다.
📌 중요한 코드 설명
viewPager2 🔑
viewPager2는 이미지를 마우스 드래그에 따라 슬라이드로 이동시킬수 있게 해주는 view이다. 이것은 기능을 생성하는 Java에서 PagerAdapter를 상속해야하는데 마우스의 드래그가 일어나면 이벤트 처리를 해준다. 이러한 어뎁터로 Fragment를 생성하여 viewpager2에 계속 추가를 해준다.
즉 viewPager2를 slideshow.xml에서 추가해준뒤 그안에 넣을 Fragment에 해당하는 xml,java 도 생성해주어야한다.
fragment에 해당하는 것을 FragmentStateAdapter안에 넣어주기위해 FragmentStateAdapter 상속받는 어뎁터 class도 생성해야함. (아래 사진과같은 툴 class이름은 무관 Innerclass로 생성해도되고 밖에 생성해도됨)
createFragment 메소드: 이게 중요한데 이부분에서 원하는 image를 넣은 fragment를 retrun해주면 그 이미지로 슬라이딩 되는 원리이다. 그렇다면 어떻게? (아래 이미지 Id를 가져오는 함수를 이용하면 쉬움)
getItemCount 메소드 : 그냥 슬라이딩대상의 사진이 총 몇개인지 리턴 . 이 프로젝트에선 30이 리턴되야됨.
이미지 Id 가져오기 🔑
in drawable_id = getResources().getIdentifier("리소스이름", "drawable", getContext().getPackageName());
getIdentifier 메소드는 리소스이름을 가지는 Drawable 폴더의 고유 아이디를 리턴한다.
고유아이디를 손쉽게 알아오면 그아이디를 이용하여 이미지뷰에 이미지를 변경할 수 있다.
응용하면 위에 createFragment 메소드에서
이렇게 return해주면, 클래스 필드이용하여 복잡하게 id를 가져올 필요없이 쉽게 바뀌는 것. 꿀팁
참고 : ImageViewFragment는 Fragment를 상속받는 class임 (보라색 형광펜 색칠한부분에서 class 생성한 그 클래스의 객체)
setOnEditorActionListener (EditText에 이벤트 리스너)
입력창은 사용자가 입력할때마다 바뀌어야한다. 그래서 이벤트 리스너를 달아주어야하는데 사실 나는 다른것을 이용했지만 밑에 API를 이용하는 것이 정석적이고 좀 더 쉽다.
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_SEARCH:
Toast.makeText(getApplicationContext(), "검색", Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(getApplicationContext(), "기본", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
});
v는 현재 editText를 TextView로 가져오며 v.getText로 내용을 가지고와서 1~30까지인지 검사 . 1~30까지라면 viewPager2에 setCurrentItem(int id) 메소드에 넣으면 자동으로 그 페이지로 변경됨
viewPager2.setCurrentItem(int id)
id에 해당하는 pager로 이동됨
viewPager2.registerOnPageChangeCallback()
page가 바뀌면 실행되는 함수. 페이지가 바뀌면 입력창의 번호도 바뀌어야하기때문에 이 함수가 필요함.
'🎈 안드로이드' 카테고리의 다른 글
[Java] 배우들의 영화정보 API로 가져오는 앱 with 안드로이드 스튜디오(미완성) (1) | 2020.12.03 |
---|---|
[Java] 네트워킹 in 안드로이드 스튜디오 (0) | 2020.11.19 |
[Java] Service에 Thread활용한 Log찍기 앱 with 안드로이드 스튜디오 (9) | 2020.11.10 |
[Java] 연락처 저장 앱 with 안드로이드 스튜디오 (2) | 2020.11.09 |
[Java] 안드로이드 스튜디오 기초 함수모음 (0) | 2020.10.12 |