1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Android怎么自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件

      本文小編為大家詳細(xì)介紹“Android怎么自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Android怎么自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

      成都創(chuàng)新互聯(lián)公司長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為高碑店企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),高碑店網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

      一、簡(jiǎn)介

      1.1、效果圖如下

      Android怎么自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件

      1.2、主要功能如下

      1:?jiǎn)螐垐D片的時(shí)候支持按照?qǐng)D片寬高比列在設(shè)定區(qū)域內(nèi)自適應(yīng)

      2:Adapter方式綁定數(shù)據(jù)和UI

      3:圖片點(diǎn)擊事件回調(diào)

      4:設(shè)置圖片間隔大小

      5:自由通過Glide設(shè)置ImageView圓角效果

      二、使用

      2.1、自定義屬性如下

      
          
              
              
              
              
              
              
          
      

      2.2、布局中使用自定義NineImageLayout

       

      2.3、Adapter方式綁定數(shù)據(jù)和UI

      其中Glide.asBitmap是為了計(jì)算圖片寬高,如果后臺(tái)有返回圖片的寬高可以省略這一步,直接setSingleImage(width, height,imageView),

      Ps:如果可以建議后臺(tái)返回圖片寬高,這樣可以避免單張圖片的時(shí)候控件高度跳屏,比如我限制單張圖片寬高在200dp范圍,要展示寬1000px高500px的時(shí)候,在圖片未加載完成時(shí)控件寬高為200dp,圖片加載完成后高度變?yōu)?00dp,會(huì)有一個(gè)不好的用戶體驗(yàn),所以建議上傳圖片的時(shí)候記錄圖片寬高信息

      nineImageLayout.setAdapter(new NineImageAdapter() {
                  @Override
                  protected int getItemCount() {
                      return mData.size();
                  }
      
                  @Override
                  protected View createView(LayoutInflater inflater, ViewGroup parent, int i) {
                      return inflater.inflate(R.layout.item_img_layout, parent, false);
                  }
      
                  @Override
                  protected void bindView(View view, final int i) {
                      final ImageView imageView = view.findViewById(R.id.iv_img);
                      Glide.with(mContext).load(mData.get(i)).into(imageView);
                      if (mData.size() == 1) {
                          Glide.with(mContext)
                                  .asBitmap()
                                  .load(mData.get(0))
                                  .into(new SimpleTarget() {
                                      @Override
                                      public void onResourceReady(Bitmap bitmap, Transition transition) {
                                          final int width = bitmap.getWidth();
                                          final int height = bitmap.getHeight();
                                          nineImageLayout.setSingleImage(width, height,imageView);
                                      }
                                  });
                          Glide.with(mContext).load(mData.get(0)).into(imageView);
                      } else {
                          Glide.with(mContext).load(mData.get(i)).into(imageView);
                      }
                  }
      
                  @Override
                  public void OnItemClick(int i, View view) {
                      super.OnItemClick(position, view);
                      Toast.makeText(mContext, "position:" + mData.get(i), Toast.LENGTH_SHORT).show();
                  }
              });

      2.4、列表里面使用

      頁(yè)面放一個(gè)RecyclerView

      
      
          
      

      item布局如下

      
      
      
          
      
          
      

      Activity中構(gòu)造一下測(cè)試數(shù)據(jù),大致代碼如下

      public class NineImageLayoutActivity extends AppCompatActivity {
          private RecyclerView mRecyclerView;
          private MyAdapter mAdapter;
          private Random random;
          private final String URL_IMG = "http://q3x62hkt1.bkt.clouddn.com/banner/58f57dfa5bb73.jpg";
          private final String URL_IMG_2 = "http://q3x62hkt1.bkt.clouddn.com/timg.jpeg";
          private List> mList = new ArrayList<>();
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_nine_image_layout);
              random = new Random();
              List testList = new ArrayList<>();
              testList.add(URL_IMG_2);
              for (int i = 0; i < 100; i++) {
                  int count = i % 9 + 1;
                  List list = new ArrayList<>();
                  for (int j = 0; j < count; j++) {
                      list.add(URL_IMG);
                  }
                  if (i % 8 == 0) {
                      mList.add(testList);
                  }
                  mList.add(list);
              }
              mRecyclerView = findViewById(R.id.recyclerview);
              mAdapter = new MyAdapter(mList, this);
              mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
              mRecyclerView.setAdapter(mAdapter);
          }
      }

      MyAdapter中設(shè)置數(shù)據(jù)

      import java.util.List;
      
      /**
       * @author : ChenYangQi
       * date   : 2020/1/16 13:49
       * desc   :
       */
      public class MyAdapter extends RecyclerView.Adapter {
          private List> mList;
          private Context mContext;
      
          public MyAdapter(List> mList, Context mContext) {
              this.mList = mList;
              this.mContext = mContext;
          }
      
          @NonNull
          @Override
          public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
              View view = LayoutInflater.from(mContext).inflate(R.layout.item_nine_img_layout_list, parent, false);
              return new MyViewHolder(view);
          }
      
          @Override
          public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
              final List mData = mList.get(position);
              holder.tvTitle.setText("這是" + mData.size() + "張圖片的標(biāo)題");
              final NineImageLayout nineImageLayout = holder.nineImageLayout;
              holder.nineImageLayout.setAdapter(new NineImageAdapter() {
                  @Override
                  protected int getItemCount() {
                      return mData.size();
                  }
      
                  @Override
                  protected View createView(LayoutInflater inflater, ViewGroup parent, int i) {
                      return inflater.inflate(R.layout.item_img_layout, parent, false);
                  }
      
                  @Override
                  protected void bindView(View view, final int i) {
                      final ImageView imageView = view.findViewById(R.id.iv_img);
                      Glide.with(mContext).load(mData.get(i)).into(imageView);
                      if (mData.size() == 1) {
                          Glide.with(mContext)
                                  .asBitmap()
                                  .load(mData.get(0))
                                  .into(new SimpleTarget() {
                                      @Override
                                      public void onResourceReady(Bitmap bitmap, Transition transition) {
                                          final int width = bitmap.getWidth();
                                          final int height = bitmap.getHeight();
                                          nineImageLayout.setSingleImage(width, height,imageView);
                                      }
                                  });
                          Glide.with(mContext).load(mData.get(0)).into(imageView);
                      } else {
                          Glide.with(mContext).load(mData.get(i)).into(imageView);
                      }
                  }
      
                  @Override
                  public void OnItemClick(int i, View view) {
                      super.OnItemClick(position, view);
                      Toast.makeText(mContext, "position:" + mData.get(i), Toast.LENGTH_SHORT).show();
                  }
              });
          }
      
          @Override
          public int getItemCount() {
              return mList.size();
          }
       
          class MyViewHolder extends RecyclerView.ViewHolder {
              TextView tvTitle;
              NineImageLayout nineImageLayout;
      
              public MyViewHolder(@NonNull View itemView) {
                  super(itemView);
                  tvTitle = itemView.findViewById(R.id.tv_title);
                  nineImageLayout = itemView.findViewById(R.id.nine_image_layout);
              }
          }
      }

      讀到這里,這篇“Android怎么自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      網(wǎng)頁(yè)題目:Android怎么自定義ViewGroup實(shí)現(xiàn)朋友圈九宮格控件
      標(biāo)題URL:http://ef60e0e.cn/article/gegepj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        富锦市| 高碑店市| 乌什县| 分宜县| 霍州市| 岚皋县| 上饶市| 山西省| 青州市| 台湾省| 辽中县| 顺平县| 靖远县| 勃利县| 正宁县| 广河县| 玛纳斯县| 耒阳市| 虎林市| 武安市| 郴州市| 廊坊市| 营山县| 正宁县| 宁德市| 古浪县| 饶河县| 赤峰市| 鱼台县| 瑞丽市| 仁寿县| 庆安县| 铜川市| 梅州市| 彰化市| 桃源县| 池州市| 禹州市| 新蔡县| 彭山县| 大安市|