Android 가 GridView 를 수평 으로 스크롤 하 는 실현 방식 을 자세히 설명 합 니 다.
아래 에 사 용 된 테스트 데이터 datas 집합 은 모두 List
public static List<ResolveInfo> getAppData(Context context) {
PackageManager packageManager = context.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
return packageManager.queryIntentActivities(mainIntent, 0);
}
1.한 줄 가로 표시사고의 방향 을 실현 하 다.
코드 에 GridView 의 NumColumns 를 동적 으로 설정 하여 GridView 가 표시 할 데이터 집합 크기 와 같 도록 합 니 다
키 코드
/**
* GridView
*/
private void changeGridView() {
// item
int itemWidth = DensityUtil.dip2px(this, 100);
// item
int itemPaddingH = DensityUtil.dip2px(this, 1);
int size = datas.size();
// GridView
int gridviewWidth = size * (itemWidth + itemPaddingH);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
mContentGv.setLayoutParams(params);
mContentGv.setColumnWidth(itemWidth);
mContentGv.setHorizontalSpacing(itemPaddingH);
mContentGv.setStretchMode(GridView.NO_STRETCH);
mContentGv.setNumColumns(size);
}
여기 서 사용 하 는 dip2px 방법 은 핸드폰 해상도 에 따라 dp 단위 에서 px(픽 셀)로 전환 하 는 것 입 니 다.
/**
* dp px( )
* @param context
* @param dpValue dp
* @return px
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
레이아웃 파일 에서 Horizontal ScrollView 패키지 GridView 사용 하기
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gv_horizontal_gridview_line"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
</LinearLayout>
</HorizontalScrollView>
상기 설정 을 통 해 Adapter 어댑터 를 더 하면 한 줄 의 가로 스크롤 을 실현 할 수 있 습 니 다.어댑터 는 일반적인 실현 방식 을 사용 하면 됩 니 다.여 기 는 붙 이지 않 습 니 다.2.여러 줄 의 가로 페이지 표시
사고의 방향 을 실현 하 다.
데이터 양 이 많 을 때 는 페이지,계산 방식 이 필요 하 다.
페이지 수=총 수량÷페이지 당 표시 수량
정리 할 수 없 는 것 이 있 으 면 Math.ceil()함 수 를 사용 하여 위로 정리 해 야 합 니 다.
키 코드
/**
* , item , GridView
*/
private void initViews(List<ResolveInfo> datas) {
int dataSize = datas.size();
// ( = ÷ )
int PageCount = (int) Math.ceil(dataSize / APP_SIZE);
mGridViewList = new ArrayList<>();
for (int i = 0; i <= PageCount; i++) {
GridView appPage = new GridView(this);
appPage.setAdapter(new HorizontalGvAdapter(this, datas, i));
appPage.setNumColumns(4);
appPage.setVerticalSpacing(1);
appPage.setHorizontalSpacing(1);
appPage.setHorizontalScrollBarEnabled(false);
appPage.setVerticalScrollBarEnabled(false);
mGridViewList.add(appPage);
}
if(dataSize % APP_SIZE == 0){
mGridViewList.remove(mGridViewList.size()-1);
PageCount--;
}
mGvPagerAdapter = new HorizontalGvPagerAdapter(mGridViewList);
viewPager.setAdapter(mGvPagerAdapter);
viewPager.addOnPageChangeListener(new MyPageChangeListener());
addDot(PageCount);
}
총 수량÷각 페이지 의 표시 수량 이 마침 정리 되 었 을 때 한 페이지 의 빈 페이지 가 나타 날 수 있 습 니 다.이 럴 때 더 많은 페이지 를 제거 해 야 합 니 다.
if(dataSize % APP_SIZE == 0){
mGridViewList.remove(mGridViewList.size()-1);
PageCount--;
}
Adapter 는 생 성 초기 에 표 시 된 데 이 터 를 제어 해 야 합 니 다.GridView 마다 하나의 Adapter 가 있 기 때문에 표 시 된 datas 를 동적 으로 계산 해 야 합 니 다.전송 구조 방법의 데 이 터 를 동적 으로 계산 하면 데이터 가 불 러 오기 시작 하 는 위치,불 러 오기 끝 나 는 위 치 를 얻 을 수 있 습 니 다.
HorizontalGv Adapter 의 구조 방법:
/**
*
*/
private List<ResolveInfo> mAppDatas = new ArrayList<ResolveInfo>();
public HorizontalGvAdapter(Context context, List<ResolveInfo> list, int page) {
this.mContext = context;
//
int pageStart = page * HorizontalGridViewAct.APP_SIZE;
//
int pageEnd = pageStart + HorizontalGridViewAct.APP_SIZE;
while ((pageStart < list.size()) && (pageStart < pageEnd)) {
mAppDatas.add(list.get(pageStart));
pageStart++;
}
}
작은 원점 이 필요 하 다 면,먼저 레이아웃 에 빈 LinearLayout 를 작은 원점 의 용기 로 사용 할 수 있 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/vp_horizontal_gridview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center"
android:background="#c5c5c5"
android:scaleType="fitXY"/>
<!-- -->
<LinearLayout
android:id="@+id/ll_dot_container"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#4b4b4b"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal"/>
</LinearLayout>
그리고 코드 에 만 든 작은 원점 을 List
// list
private List<View> dotViewsList;
/**
*
* @param dotNumber viewPager
*/
private void addDot(int dotNumber) {
if (null == dotViewsList) {
dotViewsList = new ArrayList<View>();
}
LinearLayout dotLayout = (LinearLayout) findViewById(R.id.ll_dot_container);
for (int i = 0; i <= dotNumber; i++) {
ImageView dotView = new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
//
params.leftMargin = 10;
params.rightMargin = 10;
//
params.height = 15;
params.width = 15;
dotLayout.addView(dotView, params);
dotViewsList.add(dotView);
}
//
setDotShow(0);
}
, ,
/**
*
* @param position
*/
private void setDotShow(int position){
if (dotViewsList == null){
return;
}
for (int i = 0; i < dotViewsList.size(); i++) {
if (i == position) {
dotViewsList.get(position).setBackgroundResource(R.drawable.ic_dot_on);
} else {
dotViewsList.get(i).setBackgroundResource(R.drawable.ic_dot_off);
}
}
}
3.총화이상 은 GridView 를 가로로 스크롤 하 는 방식 입 니 다.사실 저 희 는 귀 찮 게 하지 않 아 도 됩 니 다.Google 은 슈퍼 port-v7 패키지 에서 RecyclerView 컨트롤 을 제공 합 니 다.가로 와 세로 스크롤 을 전환 하려 면 레이아웃 관리자 가 setOrientation 방법 으로 설정 하면 됩 니 다.매우 편리 합 니 다.프로젝트 가 허용 된다 면 RecyclerView 를 사용 하여 이러한 수 요 를 실현 하 는 것 을 권장 합 니 다.
여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 가 GridView 를 수평 으로 스크롤 하 는 실현 방식 을 자세히 설명 합 니 다.코드 에 GridView 의 NumColumns 를 동적 으로 설정 하여 GridView 가 표시 할 데이터 집합 크기 와 같 도록 합 니 다 레이아웃 파일 에서 Horizontal ScrollView 패키지 Gri...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.