当前位置:  编程技术>移动开发
本页文章导读:
    ▪设立APK的安装位置(SD卡or内存)        设置APK的安装位置(SD卡or内存) adb shell pm setInstallLocation 2      SD卡adb shell pm setInstallLocation 0      内存 ......
    ▪ ListView学习(3) 加载视野内的数据        ListView学习(三) 加载视野内的数据 在滑动的过程中,只有在视野中的item才会加载数据,其他的其实显示的都是”loading…” 这样的好处就是如果加载的是图片的话,那么始终加载的只是几.........
    ▪ gallery加载大量图片时内存溢出的解决办法(二)       gallery加载大量图片时内存溢出的解决方法(二) Paint deafalutPaint = new Paint();         canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);         canvas.drawBitmap(reflectionImage, 0, height + .........

[1]设立APK的安装位置(SD卡or内存)
    来源: 互联网  发布时间: 2014-02-18
设置APK的安装位置(SD卡or内存)
adb shell pm setInstallLocation 2      SD卡

adb shell pm setInstallLocation 0      内存

    
[2] ListView学习(3) 加载视野内的数据
    来源: 互联网  发布时间: 2014-02-18
ListView学习(三) 加载视野内的数据

在滑动的过程中,只有在视野中的item才会加载数据,其他的其实显示的都是”loading…” 这样的好处就是如果加载的是图片的话,那么始终加载的只是几张图片而非是所有的图片,这样就能很好的避免出现内存溢出的问题,当然其他的图片要及时的回收才行,否则图片对象依然在内存里(这样的话图片最好先保存在本地,这样就不会频繁的发送请求,就不会产生网络流量),关于加载大量图片的问题会在以后的文章中出现。下面就看代码,非常简单。

 

public class ListViewTest extends Activity implements ListView.OnScrollListener {

  private boolean mBusy = false;

    ListView l;

    SlowAdapter slowAdapter;

    int totalPage = 10;// 共有页数

    int nowPage = 1;// 当前页

    int lastItem = 0;

    List<String> mStrings= new ArrayList<String>();

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.main);

         l = (ListView) findViewById(R.id.mainList);

        getListByPage(nowPage);

        slowAdapter=new SlowAdapter(this,mStrings);

        l.setAdapter(slowAdapter);

 

        l.setOnScrollListener(this);

    }

   

   

    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,

            int totalItemCount) {

    lastItem = firstVisibleItem + visibleItemCount - 1;

    }

   

    public void onScrollStateChanged(AbsListView view, int scrollState) {

        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {    //滑动停止

            mBusy = false;

           

            if(lastItem==mStrings.size()-1){

            nowPage++;

            if (nowPage <= totalPage) {

                getListByPage(nowPage);

            }

            }

            slowAdapter.notifyDataSetChanged();

    }

        else if(scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){//滑动手未松开

               mBusy = true;

        }else if(scrollState == OnScrollListener.SCROLL_STATE_FLING){//滑动中手已松开

               mBusy = true;

        }

    }

   

    private class SlowAdapter extends BaseAdapter {

        private LayoutInflater inflater;

        private List<String> list;

        public SlowAdapter(Context context,List<String> list) {

            this.list=list;

            inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public int getCount() {

            return list.size();

        }

 

        public Object getItem(int position) {

            return position;

        }

 

        public long getItemId(int position) {

            return position;

        }

 

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

            TextView text;

            

            if (convertView == null) {

                text = (TextView)inflater.inflate(android.R.layout.simple_list_item_1, parent, false);

            } else {

                text = (TextView)convertView;

            }

            if (!mBusy) {

                text.setText(list.get(position));

            } else {

                text.setText("Loading...");

            }

            return text;

        }

    }

   

    public void getListByPage(int page){

int start = (page-1)*20;

    int size=page*20;

    for(int i=start;i<size;i++){

         mStrings.add("条目"+i); 

    }

 

 

   }

 


    
[3] gallery加载大量图片时内存溢出的解决办法(二)
    来源: 互联网  发布时间: 2014-02-18
gallery加载大量图片时内存溢出的解决方法(二)

Paint deafalutPaint = new Paint();

        canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

        canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

        Paint paint = new Paint();

        LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,

                bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,

                0x00ffffff, TileMode.CLAMP);

        paint.setShader(shader);

        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

        canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

                + reflectionGap, paint);

        return bitmapWithReflection;

    }

}

 

2、加载图片的线程

    class MyThread extends Thread{

        int index;

        public MyThread(int index) {

            super();

            this.index = index;

        }

        @Override

        public void run() {

            if (imageList.get(index).getIsNull().equals(ISTRUE)) {          imageList.get(index).setImage(ImageManager.getRefImage(imageList.get(index)

                                .getPath()));

                imageList.get(index).setIsNull(ISFALSE);

            }

            refreshAdapter();

        }

        }

 

 

 

3、gallery的滑动事件

private Gallery.OnItemSelectedListener itemSelected_listener = new Gallery.OnItemSelectedListener() {

        @Override

        public void onItemSelected(AdapterView<?> arg0, View arg1, int position,

                long arg3) {

            toShowIndex = position;

            final Handler handler = new Handler() {

                @Override

                public void handleMessage(Message msg) {

                    if (showingIndex != toShowIndex) {

                        showingIndex = toShowIndex;

                        // 业务逻辑处理

                        if (toShowIndex < imageList.size()) {

                            addImage(toShowIndex);

                        }

                    }

                }

            };

            Thread checkChange = new Thread() {

                @Override

                public void run() {

                    int myIndex = toShowIndex;

                    try {

                        sleep(TIME_OUT_DISPLAY);

                        if (myIndex == toShowIndex) {

                            handler.sendEmptyMessage(0);

                        }

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                }

            };

            checkChange.start();

            TextView gallery_total =  (TextView) findViewById(R.id.gallery_total);

            gallery_total.setText((toShowIndex + 1) + "/"+ imageList.size());       }

        @Override

        public void onNothingSelected(AdapterView<?> arg0) {

        }

    };

4、更新ImageAdapter

    private void refreshAdapter() {

        this.runOnUiThread(new Runnable() {

            @Override

            public void run() {

                adpter.notifyDataSetChanged();

            }

        });

    }

5、从sd卡里获取图片后封装对象

    public List<ImageMessage> getAllImageMessage() {

        List<ImageMessage> imageList = new ArrayList<ImageMessage>();

                getSD(Environment.getExternalStorageDirectory().toString()+ "/");

        for (int i = 0; i < pathList.size(); i++) {

            ImageMessage im = new ImageMessage();

            im.setPath(pathList.get(i)[0]);

            im.setName(pathList.get(i)[1]);

            im.setIsNull(ISTRUE);

            imageList.add(im);

        }

        return imageList;

    }


    
最新技术文章:
▪Android开发之登录验证实例教程
▪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