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 出来,但注意要设置它每列显示的个数。

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

相关文章
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
110 1
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
100 2
|
1月前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
140 0
安卓项目:app注册/登录界面设计
|
15天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
43 6
|
25天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
42 2
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
1月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
20 1
|
16天前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
23 0
|
1月前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
21 2
|
1月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目