android 는 ScrollerView 를 사용 하여 위아래 로 스크롤 할 수 있 는 분류 표시 줄 인 스 턴 스 를 실현 합 니 다.

더 깊 은 성능 문 제 를 고려 하지 않 는 다 면 저 는 개인 적 으로 Scroller View 가 좋 을 것 이 라 고 생각 합 니 다.또한 ScrollerView 만 사용 하면 유형 별 RecyclerView 나 ListView 가 실현 할 수 있 는 효 과 를 실현 할 수 있다.
다음은 효과 전시 만 을 고려 하여 ScrollerView 를 사용 하여 다음 그림 에서 보 여 준 스크롤 가능 한 여러 항목 의 분 류 를 실현 하고 여러분 과 함께 새로운 방향 을 공유 하기 위해 서 입 니 다.(평소:재 활용 성 등 을 고려 하면 흠 이 있 는 것 이 분명 합 니 다~)

특징 설명:
1.위아래 로 스크롤 가능
2.격자 레이아웃 과 유사 한 스타일
3.하위 항목 은 클릭 이벤트 가 있 음
이 효 과 를 처음 봤 을 때 가장 먼저 생각 나 는 것 은 유형 별 RecyclerView 나 ListView 를 사용 하 는 것 이다.  ,안에 GridView 를 덧 붙 여 실현 합 니 다.
하지만 스크롤 러 뷰 를 돌 면 스크롤 이 가능 합 니 다.안쪽 으로 순환 해서 하위 아 이 템 을 추가 하면 되 지 않 겠 습 니까?
실현 의 논 리 는 대체로 다음 과 같다.


구체 적 인 실현 은 다음 과 같다.
첫 번 째 단계:레이아웃 에 ScrollerView 를 쓰 고 세로 선형 레이아웃 을 추가 합 니 다.
두 번 째 단계:수직 선형 레이아웃 을 예화 합 니 다.

allhonor_hscroll = (LinearLayout) findViewById(R.id.allhonor_hscroll); 
세 번 째 단계:인터넷 요청 데이터 획득

setAllHonorData(); 

/** 
  *   okhttp 
  */ 
  public void setAllHonorData() { 
    OkHttpUtils 
        .get() 
        .url(url) 
        .build() 
        .execute(new StringCallback() { 
          @Override 
          public void onError(okhttp3.Call call, Exception e, int id) { 
            Log.e("TAG", "111"); 
            Log.e("TAG", "onError" + e.getMessage()); 
          } 
 
          @Override 
          public void onResponse(String response, int id) { 
            Log.e("TAG", "222"); 
            Log.e("TAG", "onRespons" + response); 
 
            //       fastjson      
            processData(response); 
          } 
 
          @Override 
          public void onBefore(Request request, int id) { 
          } 
 
          @Override 
          public void onAfter(int id) { 
          } 
 
        }); 
  } 

/** 
   *   fastjson     
   * 
   * @param json 
   */ 
  private void processData(String json) { 
    //  GsonFormat     bean  
    com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json); 
    String data = jsonObject.getString("data"); 
    List<AllHonorBean.HornorBean> hornorsList = JSON.parseArray(data, AllHonorBean.HornorBean.class); 
 
    //           
//    String strTest = hornorsList.get(0).getRegion(); 
//    Log.e("TAG", strTest); 
 
    //   :    ,    for   
 
  } 

네 번 째 단계:두 가지 아 이 템 의 레이아웃 설정
첫 번 째 아 이 템 레이아웃:itemallhornors0.xml

<?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"> 
 
  <TextView 
    android:id="@+id/tv_allhornors_big" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#11000000" 
    android:gravity="center_vertical" 
    android:paddingBottom="12dp" 
    android:paddingLeft="13dp" 
    android:paddingTop="12dp" 
    android:text="  " 
    android:textColor="#000000" 
    android:textSize="14sp" /> 
 
  <View 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    android:background="#11000000" /> 
 
</LinearLayout> 
두 번 째 아 이 템 레이아웃:itemallhornors1.xml

<?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="wrap_content" 
  android:background="#ffffff" 
  android:orientation="vertical"> 
 
  <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
 
    <TextView 
      android:id="@+id/tv_allhornors_sn0" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:gravity="center" 
      android:paddingBottom="12sp" 
      android:paddingTop="12sp" 
      android:text="    " 
      android:textColor="#000000" 
      android:textSize="13sp" /> 
 
    <View 
      android:layout_width="1dp" 
      android:layout_height="match_parent" 
      android:background="#11000000" /> 
 
    <!--     text       ,        --> 
    <TextView 
      android:id="@+id/tv_allhornors_sn1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:gravity="center" 
      android:paddingBottom="12sp" 
      android:paddingTop="12sp" 
      android:text="" 
      android:textColor="#000000" 
      android:textSize="13sp" /> 
  </LinearLayout> 
 
  <View 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    android:background="#11000000" /> 
 
</LinearLayout> 
다섯 번 째 단계:조립 데이터

if (hornorsList != null && hornorsList.size() > 0) { 
      //-->   
      for (int i = 0; i < hornorsList.size(); i++) { 
        //        item   
        View globalView = View.inflate(this, R.layout.item_allhornors0, null); 
        TextView tv_allhornors_big = (TextView) globalView.findViewById(R.id.tv_allhornors_big); 
        AllHonorBean.HornorBean hornorsListBean = hornorsList.get(i); 
        String region = hornorsListBean.getRegion(); 
        //  for        
        tv_allhornors_big.setText(region); 
        //        
        allhonor_hscroll.addView(globalView); 
 
        List<AllHonorBean.HornorBean.FestivalsBean> festivalsList = hornorsListBean.getFestivals(); 
        //-->  ,        
        for (int j = 0; j < festivalsList.size(); j = j + 2) { 
          //        item   
          View smallView = View.inflate(this, R.layout.item_allhornors1, null); 
          final TextView tv_sn0 = (TextView) smallView.findViewById(R.id.tv_allhornors_sn0); 
          TextView tv_sn1 = (TextView) smallView.findViewById(R.id.tv_allhornors_sn1); 
 
          //                  
          if (j < festivalsList.size() - 1) { 
            setListener(tv_sn0, tv_sn1); 
          } 
 
          //        
          honorName0 = festivalsList.get(j).getFestivalName(); 
          tv_sn0.setText(honorName0); 
 
          //      
          if (j < festivalsList.size() - 1) { 
            //        
            honorName1 = festivalsList.get(j + 1).getFestivalName(); 
            tv_sn1.setText(honorName1); 
          } 
 
          //     
          allhonor_hscroll.addView(smallView); 
        } 
      } 
    } 
이벤트 감청 클릭:

private void setListener(final TextView tv_sn0, final TextView tv_sn1) { 
    //    TextView      
    tv_sn0.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
        Toast.makeText(MainActivity.this, "" + tv_sn0.getText(), Toast.LENGTH_SHORT).show(); 
      } 
    }); 
 
    //    TextView      
    tv_sn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
        Toast.makeText(MainActivity.this, "" + tv_sn1.getText(), Toast.LENGTH_SHORT).show(); 
      } 
    }); 
  } 

완성~
마지막 효과 다시 보기:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기