Android Open Source - inside-list-view-talk Recicle Bitmap Adapter






From Project

Back to project page inside-list-view-talk.

License

The source code is released under:

MIT License

If you think the Android project inside-list-view-talk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.flipper.example.insidelist.adapter;
//from  w  ww  . ja va2 s .co m
import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.support.v4.util.LruCache;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.flipper.example.insidelist.model.DataModel;
import com.flipper.example.insidelist.rendermodel.RenderBase;
import com.flipper.example.insidelist.rendermodel.RenderBitmapCache;
import com.flipper.example.insidelist.rendermodel.RenderDebug;

import java.util.List;
import java.util.Random;

public class RecicleBitmapAdapter extends BaseInsideAdapter {

    private Random random = new Random();
    private LruCache<String, Bitmap> cache;

    public RecicleBitmapAdapter(Context context, List<DataModel> values) {
        super(context, values);

        ActivityManager am = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        int memorySize = am.getMemoryClass() * 1024 * 1024;
        cache = new LruCache<String, Bitmap>(memorySize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getByteCount();
            }
        };
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        long timeStart = System.nanoTime();

        DataModel data = (DataModel) getItem(position);

        RenderBase render = renderBuilder.obtainVideoRender(data, convertView, parent);

        //set debug info
        RenderDebug renderDebug = (RenderDebug) render;
        if (renderDebug.isNew()) {
            renderDebug.setId(contRemake);
            contRemake++;
        }


        Bitmap bitmap = cache.get("" + position);
        if (bitmap != null) {

            ImageView imageView = ((RenderBitmapCache) render).getImageBuffer();
            imageView.setImageBitmap(bitmap);
            imageView.setTag(render);
            convertView = imageView;
        } else {

            View base = render.renderView(context, data);

            //this is ugly code but it's only for test propouses
            if (convertView instanceof ImageView) {
                createCacheBitmap(position, base);
                ((ImageView) convertView).setImageBitmap(cache.get("" + position));
                convertView = base;
            } else {
                final View finalConvertView = base;
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        createCacheBitmap(position, finalConvertView);
                    }
                }).run();
                convertView = base;
            }
        }

        //end process
        renderDebug.setOldPosition(position);

        long timeEnd = System.nanoTime();

        renderBuilder.notifyTotalRenderTime(timeEnd - timeStart);

        return convertView;
    }

    private void createCacheBitmap(int position, View view) {
        // create bitmap
        if ((view.getWidth() > 0) && (view.getHeight() > 0)) {
            Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(),
                    view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(bitmap);
            view.draw(c);

            cache.put("" + position, bitmap);
        }
    }

}




Java Source Code List

com.flipper.example.insidelist.activity.InsideBaseListActivity.java
com.flipper.example.insidelist.activity.InsideListViewAnimatedItemsTransient.java
com.flipper.example.insidelist.activity.InsideListViewAnimatedItems.java
com.flipper.example.insidelist.activity.InsideMainActivity.java
com.flipper.example.insidelist.activity.NoRecycleActivity.java
com.flipper.example.insidelist.activity.RecicleBitmapActivity.java
com.flipper.example.insidelist.activity.RecycleActivity.java
com.flipper.example.insidelist.activity.ViewHolderActivity.java
com.flipper.example.insidelist.adapter.BaseInsideAdapter.java
com.flipper.example.insidelist.adapter.DebugAdapter.java
com.flipper.example.insidelist.adapter.OptionsAdapter.java
com.flipper.example.insidelist.adapter.RecicleBitmapAdapter.java
com.flipper.example.insidelist.adapter.ViewHolderAdapterAnimated.java
com.flipper.example.insidelist.builder.RenderBuilder.java
com.flipper.example.insidelist.component.DebugListView.java
com.flipper.example.insidelist.model.DataModel.java
com.flipper.example.insidelist.model.RenderOptionData.java
com.flipper.example.insidelist.model.RenderViewData.java
com.flipper.example.insidelist.rendermodel.GeneralInfoListener.java
com.flipper.example.insidelist.rendermodel.RenderAnimated.java
com.flipper.example.insidelist.rendermodel.RenderBase.java
com.flipper.example.insidelist.rendermodel.RenderBitmapCache.java
com.flipper.example.insidelist.rendermodel.RenderDebug.java
com.flipper.example.insidelist.rendermodel.RenderOptionView.java