Bitmap实现照片墙

本文介绍了如何在Android中使用Bitmap高效地展示照片墙,包括在GridView中显示图片,利用BitmapFactory进行位图压缩,使用BitmapWorkerTask进行异步加载,以及通过LruCache实现内存缓存,提升应用性能和用户体验。
摘要由CSDN通过智能技术生成

Bitmap实现照片墙

Android开发中 位图 的展示 存储 缓存是很重要部分,现代化的用户界面有很多信息都是通过图片形式进行展现,如何更好的展示图片也是衡量一款App 性能和用户体验的重要部分。

Training–>Building Apps with Graphics & Animation–>Displaying Bitmaps Efficiently

今天就写一个简单的照片墙应用来实现Android的Bitmap图片展示功能。

目录结构:

目录结构

1.GridView实现图片展示界面

  • activity_main.xml中设置GridView布局
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="120dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

GridView 设置列数 列的宽度 item横向 纵向间距 和 stretchMode 属性。

  • 在MainActivity中实例化GridView,并实现ImageAdapter
    setContentView(R.layout.activity_main);
        //实例化GridView,并设置adpter
    gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));
public class ImageAdapter extends BaseAdapter {
   
        private Context context;

        public ImageAdapter(Context context) {
            super();
            this.context = context;
        }

        @Override
        public int getCount() {
            return images.length;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = LayoutInflater.from(context);
            View v;
            if (convertView == null) {
                //若为空,则动态加载一个View
                v = inflater.inflate(R.layout.grid_item, null);
                v.setPadding(8, 8, 8, 8);

            } else {
                v = convertView;
            }
            ImageView imageView = (ImageView) v.findViewById(R.id.item_image);
            // 1.imageView.setImageResource(images[position]);

            // 2.imageView.setImageBitmap(BitmapUtils.decodeSampledBitmapFromResource(getResources(),
            // images[position], 220, 220));

            //3.loadImageView(imageView, images[position]);

            loadImageViewFromCache(imageView, images[position]);
            TextView textview = (TextView) v.findViewById(R.id.item_text);
            textview.setText(images[position] + "");
            return v;
        }


        private Integer[] images = new Integer[] { R.drawable.krystal001,
                R.drawable.krystal002, R.drawable.krystal003,
                R.drawable.krystal004, R.drawable.krystal005,
                R.drawable.krystal006, R.drawable.krystal007,
                R.drawable.krystal008, R.drawable.krystal009,
                R.drawable.krystal010, R.drawable.krystal011,
                R.drawable.krystal012, R.drawable.krystal013,
                R.drawable.krystal014 };

    }

3.设置每个Item的布局 grid_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/item_image"
        android
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值