当前位置:  编程技术>移动开发
本页文章导读:
    ▪Gallery的应用        Gallery的使用 本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!Android的Gallery控件是个很不错的看图控件,大大减轻了开发者对于看图功能的开发,而且效果也比较美观。本文介绍Galler.........
    ▪ 施用 ViewStub 延迟展开视图        使用 ViewStub 延迟展开视图   1)定义 ViewStub <ViewStub android:id = "@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_conten.........
    ▪ 应用ViewHolder模式提高效率       使用ViewHolder模式提高效率           public View getView(int pos, View convertView, ViewGroup parent){              ViewHolder holder;             if (convertView == null) {                  convertView = mInfl.........

[1]Gallery的应用
    来源: 互联网  发布时间: 2014-02-18
Gallery的使用
本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

Android的Gallery控件是个很不错的看图控件,大大减轻了开发者对于看图功能的开发,而且效果也比较美观。本文介绍Gallery的用法,用反射机制来动态读取资源中的图片。




main.xml源码:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
<Gallery android:id="@+id/gallery" android:layout_height="fill_parent" android:layout_width="fill_parent"></Gallery>  
</LinearLayout>


程序源码:
package com.testImageView;  
  
import java.lang.reflect.Field;  
import java.util.ArrayList;  
  
import android.app.Activity;  
import android.content.Context;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.os.Bundle;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.AdapterView;  
import android.widget.BaseAdapter;  
import android.widget.Gallery;  
import android.widget.ImageView;  
import android.widget.AdapterView.OnItemClickListener;  
  
public class testImageView extends Activity {  
    private Gallery mGallery;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        mGallery = (Gallery)findViewById(R.id.gallery);  
        try {  
            mGallery.setAdapter(new ImageAdapter(this));  
        } catch (IllegalArgumentException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IllegalAccessException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        mGallery.setOnItemClickListener(new OnItemClickListener() {  
            public void onItemClick(AdapterView parent, View v, int position, long id) {  
                testImageView.this.setTitle(String.valueOf(position));  
            }  
        });  
    }  
      
    /* 
     * class ImageAdapter is used to control gallery source and operation. 
     */  
    private class ImageAdapter extends BaseAdapter{  
        private Context mContext;  
        private ArrayList<Integer> imgList=new ArrayList<Integer>();  
        private ArrayList<Object> imgSizes=new ArrayList<Object>();  
        public ImageAdapter(Context c) throws IllegalArgumentException, IllegalAccessException{  
            mContext = c;  
              
            //用反射机制来获取资源中的图片ID和尺寸  
            Field[] fields = R.drawable.class.getDeclaredFields();  
            for (Field field : fields)  
            {  
                if (!"icon".equals(field.getName()))//除了icon之外的图片  
                {     
                    int index=field.getInt(R.drawable.class);  
                    //保存图片ID  
                    imgList.add(index);  
                    //保存图片大小  
                    int size[]=new int[2];  
                    Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);  
                    size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();  
                    imgSizes.add(size);  
                }  
            }  
        }  
        @Override  
        public int getCount() {  
            // TODO Auto-generated method stub  
  
            return imgList.size();  
        }  
  
        @Override  
        public Object getItem(int position) {  
            // TODO Auto-generated method stub  
  
            return position;  
        }  
  
        @Override  
        public long getItemId(int position) {  
            // TODO Auto-generated method stub  
  
            return position;  
        }  
  
        @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
            // TODO Auto-generated method stub  
  
            ImageView i = new ImageView (mContext);  
            //从imgList取得图片ID  
            i.setImageResource(imgList.get(position).intValue());  
            i.setScaleType(ImageView.ScaleType.FIT_XY);  
            //从imgSizes取得图片大小  
            int size[]= new int[2];  
            size=(int[]) imgSizes.get(position);  
            i.setLayoutParams(new Gallery.LayoutParams(size[0], size[1]));  
            return i;  
        }  
          
    };  
}  

    
[2] 施用 ViewStub 延迟展开视图
    来源: 互联网  发布时间: 2014-02-18
使用 ViewStub 延迟展开视图

 

1)定义 ViewStub

<ViewStub android:id = "@+id/stub_import"

android:inflatedId="@+id/panel_import"

android:layout="@layout/progress_overlay"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"/>

 

2)展开视图

findViewById(R.id.stub_import).setVisibility(View.VISIBLE);

// 或者 获取视图

View importPanel = ((ViewStub)

findViewById(R.id.stub_import)).inflate();

 

        有一点需要记住的是:当ViewStub inflate后,这个ViewStub就从View层次中移除了。因此,没有必要保留一个对ViewStub的引用(如在类的字段里)。

ViewStub是快捷编程与高效编程之间的产物。与其手动的inflate View并在运行时添加到View层次上,不如简单的使用ViewStub。它相当“廉价”且易于使用。ViewStub唯一的缺点是现在不支持<merge />标签。

 

        用ViewStub类和在XML文件里面指定的布局资源文件关联起来,让布局资源文件在需要使用的时候再加载上去。主要作用是性能优化,什么时候用什么时候加载,不用在开始启动的时候一次加载,既可以加快程序的启动速度,又可以节省内存资源。


 


    
[3] 应用ViewHolder模式提高效率
    来源: 互联网  发布时间: 2014-02-18
使用ViewHolder模式提高效率

 

        public View getView(int pos, View convertView, ViewGroup parent){ 

            ViewHolder holder;

            if (convertView == null) { 

                convertView = mInflater.inflate(R.layout.list_item, null); 

                holder.text = (TextView) convertView.findViewById( R.id.text));

                holder.icon = (ImageView) convertView.findViewButId( R.id.icon));

                convertView.setTag(holder); 

                }

            else { 

                holder = (ViewHolder) convertView.getTag(); 

                }

            holder.text.setText(DATA[pos]); 

            holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);

                return convertView;

//                holder = new ViewHolder();

                } 

 

//     ViewHolder 模式, 效率提高 50% 

        static class ViewHolder { 

            TextView text;

            ImageView icon;

            } 

 

//        内存分配 不要创建 Java 对象 在性能敏感的代码里, 尽量避免创建 Java 对象

           测量: 布局: onMeasure() onLayout() 绘图:

           事件处理: dispatchTouchEvent(), onTouchEvent()

          Adapter: getView(), bindView()

          GC, 垃圾回收

          整个程序会暂停 慢 (大约几百个毫秒)

 

1 楼 aaaaaaa7a 2011-11-26  
博主,请问后面那段“// 内存分配 不要创建java对象……”的意思是不是指那几个方法会引起垃圾回收从而导致程序暂停一下?

    
最新技术文章:
docker中文入门学习手册 iis7站长之家
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3