반응형
안녕하세요~
요즘 앱 만들때 필수 기능인 슬라이드 뷰 를 만드는 방법을 알려드릴게요~
저도 책보고 구글봐서 이해한거라 여러번보시고 코드 분석 해보세요~ 최대한 쉽게 이해할 수 있게 알려드릴게요!
자~ 일단 슬라이드 뷰는 fragment, fragmentActivity 를 포함한 클래스로 이뤄져요~
저같은 경우는 4개의 클래스를 만들었습니다.
1. 슬라이드 뷰 틀 전체를 담을 클래스
public class ShowStoreAd extends FragmentActivity { //슬라이드 뷰 전체를 담는 뷰
private FragmentManager fragmentManager; //안드로이드 제공 함수
private SlideViewFlagment slideViewFlagment; //2번 클래스
private FragmentTransaction fragmentTransaction; //안드로이드 제공 함수
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.slidepage); //전체를 담는 뷰
Log.d(TAG,"슬라이드"); //여기 부분은 fragmentactivity를 담을때 쓰는 전형적인 코드 형식입니다.
fragmentManager = getSupportFragmentManager();
slideViewFlagment = new SlideViewFlagment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.slidehome, slideViewFlagment).commitAllowingStateLoss();
// 이부분은 두번째 클래스와 같이 보세요. 그럼이해 될거에요.
Log.d(TAG,"슬라이드");
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/slidehome"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
2. 내용물을 슬라이드를 해 줄 수 있게 해주는 틀 클래스
public class SlideViewFlagment extends Fragment {
// When requested, this adapter returns a DemoObjectFragment,
// representing an object in the collection.
DemoCollectionPagerAdapter demoCollectionPagerAdapter; //연결해주는 어뎁터 선언(4번클래스)
ViewPager viewPager; //어뎁터를 보여줄 androidx에서 제공되는 페이지뷰(슬라이드 뷰)
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.storead, container, false);
} //androidx에서 제공되는 슬라이드 가능 레이아웃 이에요. 밑에 xml 코드 보시고 고대로쓰면 됄거에요.
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
demoCollectionPagerAdapter = new DemoCollectionPagerAdapter(getChildFragmentManager());
viewPager = view.findViewById(R.id.pager);
viewPager.setAdapter(demoCollectionPagerAdapter);
//위에 버튼 만들어주는부분. 슬라이드 말고 버튼으로도 화면이동 가능하게요.
//xml보면 있어요~ 같이보고 필요할떄 사용하세요~
TabLayout tabLayout = view.findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager); //페이지와 함께 보여준다.. 이런뜻같아요.
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager.widget.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.viewpager.widget.ViewPager>
</androidx.constraintlayout.widget.ConstraintLayout>
3. 2번 슬라이드 뷰 전체 안에 들어갈 내용물을 담을 클래스
public class DemoObjectFragment extends Fragment {//이쁘게 꾸민 내용물.
public static final String ARG_OBJECT = "object";
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.slidepages, container, false);
}//fragment개념 모르시는 분은 이부분은 그냥 따라 쓰세요. R.layout.본인레레아웃.
// 결국 이부분을 넘길때 보이는 뷰를 이곳에 꾸미면 돼요.보시다 시피 틀 자체나, 레이아웃같은건 기본적으로
//바꿀수 없게 되잇는 구조지만, Bundle 데이터 주고받으면서 if문으로 어느정도 틀을 다르게 해서 볼 수 있을거같아같아요.
// 예를들어 Bundle에서 1값을 받으면 사과사진, 2값을 받으면 바나나나 사진, 3값을 받으면 사진없애고 버튼 나오게하거나 등등
// 응용해서 만드세요~
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
Bundle args = getArguments(); //4번 클래스에서 주는 Bundle정보를 받는 변수
view.findViewById(R.id.adimage);
}
}
<?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">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/adimage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/applelogo" />
</LinearLayout>
</ScrollView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
4. 2번, 3번을 링크 해줘서 하나의 3번 클래스의 내용을 바꾸어 넘길때 마다 다른 내용의 뷰가 보이게 해주는 클래스
사실 제일 중요한 부분이죠. 이거 이해하면 슬라이드 뷰는 끝.
public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
//그리드뷰 어뎁터처럼 플레그맨트 어뎁터 있는거에요.
//넘겨야 되니까 순서나 이런거 링킹해주는거죠.
public DemoCollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
//자동으로 적용되는 인덱스 같은 함수입니다. 어디 쓰였는지 찾지 마세여
//틀 만 따고 내용은 바꾸면서 이용하세요.
//맨처음 화면 i = 0, 넘길수록 +1 씩 i값이 늘어난다고 보심 돼요.
@Override
public Fragment getItem(int i) {
Fragment fragment = new DemoObjectFragment();//3번 클래스로 초기화 해줍니다.
Bundle args = new Bundle();// Bundle은 다른 클래스에 데이터를 넘겨줄때도 사용됩니다. 지금처럼
// Our object is just an integer :-P
args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1);
//단순히 페이지 숫자 보여주려고 i+1 데이터를 3번 클래스의 ARG_OBJECT변수에 있는 "object"를 키값으로 하고 전송하는 거에요.)
//저 args.putInt 가 int 데이터를 키값과 함께 어딘가로 보내는 기능이 있어요.
fragment.setArguments(args);//fragment변수에 해당하는 fragment클래스에 args데이터 들을 보내는거죠.
return fragment;
}
// 페이지 개수를 정해요. 3번 클래스의 내용물 개수라고 보시면 되구요. 넘길 수 있는 슬리이드 개수죠.
//자동 적용되니 그냥 return에 원하는 슬라이드 개수 적으면 돼요.
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
//이건 아까 1번째 클래스에서 위에 버튼에 표시될 글이에요.
//그냥 틀 그대로 쓰면돼요. 안드로이드에서 제공되는 부분이에요. 자동으로 적용이 되서 선언되는 부분으 없습니다.
return "가게 정보 " + (position + 1);
}
}
클래스가 4개다 보니 초보 개발자 분들은 뭔가 머리 아플꺼 같은 느낌이 벌써부터 들죠~?
제가 최대한 쉽게 설명 드릴게요.!!!!
주석도 보면서 이해해보세요~
여러번 읽어보셨나요~?
전체적인 부분은
1번 클래스는 벽 , 2번 클래스는 액자, 3번 클래스는 사진, 4번클래스는 사진 바꿔달라고 말하면 사진 바꿔껴주는 사람
이라고 생각하시면 됩니다. ㅋㅋ 질문을 댓글을 달아주세요~
반응형
'IT기술(코딩)' 카테고리의 다른 글
안드로이드 스튜디오, 자바 Thread 완료될때까지 대기 (로딩중) Runnable 을 Thread로 바꾸어 사용하세요~ (0) | 2021.08.24 |
---|---|
안드로이드 스튜디오 구글 인앱결제, 정기결제 소스코드(자바,java) (0) | 2021.08.02 |
안드로이드 스튜디오 앱 전체 글로벌 변수 application 클래스 사용방법 액티비티 간 데이터 전송 (0) | 2021.07.21 |
안드로이드 스튜디오 네이버 맵 다중 마커(마커 여러개)JAVA버전 (0) | 2021.07.19 |
안드로이드 스튜디오 카카오톡 로그인 연동 API [JAVA ] (0) | 2021.07.18 |