Android 分享机顶盒项目的封装类《GridView》(三)(转)

简介: Android 分享机顶盒项目的封装类《GridView》(三)(转)
     public   void  setOnLongPressListener(onLongPressExt longPress) {
         this .onLongPress  =  longPress;
    }
     public   void  NotifyDataChange() {
        removeAllViews();
    }
     void  bindView() {
        removeAllViews();
         int  count  =  adapter.getCount();
        TableCell[] cell  =   null ;
         int  j  =   0 ;
        LinearLayout layout;
        tableRowsList  =   new  ArrayList < HashMap < String, Object >> ();
         for  ( int  i  =   0 ; i  <  count; i ++ ) {
            j ++ ;
            final  int  position  =  i;
             if  (j  >  getColumnCount()  ||  i  ==   0 ) {
                cell  =   new  TableCell[getColumnCount()];
            }
            final View view  =  adapter.getView(i,  null ,  null );
            view.setOnTouchListener( new  OnTouchListener() {
                @Override
                 public  boolean onTouch(View v, MotionEvent  event ) {
                     //  TODO Auto-generated method stub
                    unCheckPressed();
                    checkRowID  =   - 1 ;
                    checkColumnID  =   - 1 ;
                     if  (onItemClickEvent  !=   null ) {
                        onItemClickEvent.onItemClick(position,  event , view);
                    }
                     return   false ;
                }
            });
            view.setOnLongClickListener( new  OnLongClickListener() {
                @Override
                 public  boolean onLongClick(View v) {
                     if  (onLongPress  !=   null ) {
                        onLongPress.onLongPress(v);
                    }
                     return   true ;
                }
            });
            cell[j  -   1 ]  =   new  TableCell(view);
             if  (j  ==  getColumnCount()) {
                lastRowCount  =  j;
                j  =   0 ;
                HashMap < String, Object >  map  =   new  HashMap < String, Object > ();
                TableRow tr  =   new  TableRow(cell);
                map.put( " tableRow " , tr);
                tableRowsList.add(map);
                layout  =   new  LinearLayout(getContext());
                addLayout(layout, cell, tr.getSize(), tr);
            }  else   if  (i  >=  count  -   1   &&  j  >   0 ) {
                lastRowCount  =  j;
                HashMap < String, Object >  map  =   new  HashMap < String, Object > ();
                TableRow tr  =   new  TableRow(cell);
                map.put( " tableRow " , tr);
                tableRowsList.add(map);
                layout  =   new  LinearLayout(getContext());
                addLayout(layout, cell, j, tr);
            }
        }
    }
     private   void  addLayout(LinearLayout layout, TableCell[] cell,  int  size,
            TableRow tr) {
        LinearLayout.LayoutParams  params   =   new  LinearLayout.LayoutParams( 130 ,
                 110 );
        layout.setGravity(Gravity.LEFT);
        layout.setOrientation(LinearLayout.HORIZONTAL);
         for  ( int  k  =   0 ; k  <  size; k ++ ) {
            View remoteView  =  (View) tr.getCellValue(k).getValue();
            layout.addView(remoteView, k,  params );
        }
        LinearLayout.LayoutParams firstParams  =   new  LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        firstParams.leftMargin  =   60 ;
        addView(layout, firstParams);
    }
     public   void  setAdapter(AppsAdapter appsAdapter) {
         this .adapter  =  appsAdapter;
         this .setOrientation(LinearLayout.VERTICAL);
        bindView();
    }
     public   void  checkPressed( int  tableRowId,  int  tableRowColumnId) {
        ViewGroup view  =  (ViewGroup)  this .getChildAt(tableRowId);
        checkColumnID  =  tableRowColumnId;
        checkRowID  =  tableRowId;
        changeImageState(view.getChildAt(tableRowColumnId), app);
    }
     public   void  onClick( int  tableRowId,  int  tableRowColumnId, Context context) {
        LinearLayout view  =  (LinearLayout) ((ViewGroup)  this
                .getChildAt(tableRowId)).getChildAt(tableRowColumnId);
        TextView tv  =  (TextView) view.findViewById(R.id.folder);
        final String[] name  =  tv.getText().toString().split( " - " );
        Intent intent  =   null ;
         if  (name[ 0 ].toString().equals( " com.android.contacts " )) {
             if  (name[ 1 ].toString().equals(
                     " com.android.contacts.DialtactsActivity " )) {
                intent  =   new  Intent(Intent.ACTION_DIAL);
            }
             if  (name[ 1 ].toString().equals(
                     " com.android.contacts.DialtactsContactsEntryActivity " )) {
                intent  =   new  Intent(Intent.ACTION_CALL_BUTTON);
            }
        }  else  {
            intent  =  getContext().getPackageManager()
                    .getLaunchIntentForPackage(name[ 0 ].toString());
        }
        context.startActivity(intent);
    }
     /* *
     * 改变图片状态
     * 
     * @param v
     * @param list
      */
     private   void  changeImageState(View v, List < HashMap < String, Object >>  list) {
         int  size  =  list.size();
         for  ( int  i  =   0 ; i  <  size; i ++ ) {
            View view  =  (View) list. get (i). get ( " touch " );
            view.setPressed( false );
            list.remove(i);
        }
        v.setPressed( true );
        HashMap < String, Object >  map  =   new  HashMap < String, Object > ();
        map.put( " touch " , v);
        list.add(map);
    }
     public   void  unCheckPressed() {
         if  (checkColumnID  !=   - 1   &&  checkRowID  !=   - 1 ) {
            ViewGroup view  =  (ViewGroup)  this .getChildAt(checkRowID);
            view.getChildAt(checkColumnID).setPressed( false );
        }
    }
     public   class  TableRow {
         private  TableCell[] cell;
         public  TableRow(TableCell[] cell) {
             this .cell  =  cell;
        }
         public   int  getSize() {
             return  cell.length;
        }
         public  TableCell getCellValue( int  index) {
             if  (index  >=  getSize()) {
                 return   null ;
            }
             return  cell[index];
        }
         public   int  getCellCount() {
             return  cell.length;
        }
         public   int  getLastCellCount() {
             return  lastRowCount;
        }
    }
     static   public   class  TableCell {
         private  Object value;
         public  TableCell(Object value) {
             this .value  =  value;
        }
         public  Object getValue() {
             return  value;
        }
    }
}

每行显示的LAYOUT文件:

< LinearLayout  android:orientation ="vertical"
    android:background ="@drawable/lessbtn"  android:gravity ="center"
    android:layout_width ="fill_parent"  android:id ="@+id/grid_layout"
    android:layout_height ="fill_parent"  xmlns:android ="https://schemas.android.com/apk/res/android" > 
     < ImageView  android:id ="@+id/btn_appicon"
        android:layout_width ="55dip"  android:layout_height ="55dip" ></ ImageView >
     < TextView  android:id ="@+id/tv_name"  android:layout_width ="wrap_content"
        android:textColor ="#030303"  android:layout_height ="wrap_content" ></ TextView >
     < TextView  android:id ="@+id/folder"  android:layout_width ="wrap_content"
        android:visibility ="invisible"  android:layout_height ="wrap_content" ></ TextView >
</ LinearLayout >

完成这一系列的编写后,你就可以在xml直接写或者在JAVA文件里面new 出来,但注意要设置它每列显示的个数。

下篇将讲述如何实现手势切屏,如何实现分页显示数据,如何实现封装分页控件。

相关文章
|
13天前
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
89 8
|
13天前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
64 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
19天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
78 6
|
4月前
|
前端开发 数据可视化 Java
Android用Canvas画一个折线图,并加以简单封装
本文介绍了如何用Java绘制动态折线图,从固定折线图的实现到封装成可复用的组件。首先通过绘制XY坐标轴、添加坐标标签和绘制折线及数据点完成基础折线图。接着,将静态数据替换为动态输入,支持自定义X轴、Y轴和折线数据。代码中包含关键方法如`drawDaxes`(绘制坐标轴)、`drawAxispoint`(绘制坐标点)和`drawbrokenLine`(绘制折线)。最终实现可根据传入数据动态生成折线图,适用于Android开发中的数据可视化场景。
162 0
|
7月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
453 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
7月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
841 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
7月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
181 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
8月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
377 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
8月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
209 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
10月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
278 6

热门文章

最新文章