Home | History | Annotate | Download | only in bitmapsample
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.bitmapsample;
     18 
     19 import android.app.Activity;
     20 import android.content.res.Resources;
     21 import android.graphics.Color;
     22 import android.graphics.drawable.Drawable;
     23 import android.os.Bundle;
     24 import android.view.View;
     25 import android.view.ViewGroup;
     26 import android.widget.BaseAdapter;
     27 import android.widget.ListView;
     28 
     29 import com.android.bitmap.BitmapCache;
     30 import com.android.bitmap.DecodeAggregator;
     31 import com.android.bitmap.UnrefedBitmapCache;
     32 import com.android.bitmap.drawable.ExtendedBitmapDrawable;
     33 import com.android.bitmap.drawable.ExtendedBitmapDrawable.ExtendedOptions;
     34 
     35 public class MainActivity extends Activity {
     36 
     37     private ListView mListView;
     38     private final BitmapCache mCache = new UnrefedBitmapCache(TARGET_CACHE_SIZE_BYTES, 0, 0);
     39     private final DecodeAggregator mDecodeAggregator = new DecodeAggregator();
     40 
     41     private static Drawable PLACEHOLDER;
     42     private static Drawable PROGRESS;
     43 
     44     private static final float NORMAL_PARALLAX_MULTIPLIER = 1.5f;
     45     private static final int TARGET_CACHE_SIZE_BYTES = 5 * 1024 * 1024;
     46 
     47     @Override
     48     protected void onCreate(Bundle savedInstanceState) {
     49         super.onCreate(savedInstanceState);
     50         setContentView(R.layout.activity_main);
     51 
     52         if (PLACEHOLDER == null) {
     53             Resources res = getResources();
     54             PLACEHOLDER = res.getDrawable(R.drawable.ic_placeholder);
     55             PROGRESS = res.getDrawable(R.drawable.progress);
     56         }
     57 
     58         mListView = (ListView) findViewById(R.id.list);
     59         mListView.setAdapter(new MyAdapter());
     60     }
     61 
     62     private class MyAdapter extends BaseAdapter {
     63 
     64         private final String[] mItems;
     65 
     66         private final String[] ITEMS = new String[]{
     67                 "https://www.google.com/images/srpr/logo4w.png",
     68                 "http://www.google.com/logos/2012/celibidache12-hp.jpg",
     69                 "http://www.google.com/logos/2012/clara_schuman-2012-hp.jpg",
     70                 "http://www.google.com/logos/2011/royalwedding11-hp.png",
     71                 "http://www.google.com/logos/2012/vets_day-12-hp.jpg",
     72                 "http://www.google.com/logos/2011/firstmaninspace11-hp-js.jpg",
     73                 "http://www.google.com/logos/2011/nat-sov-and-childrens-turkey-hp.png",
     74                 "http://www.google.com/logos/2012/First_Day_Of_School_Isreal-2012-hp.jpg",
     75                 "http://www.google.com/logos/2012/celibidache12-hp.jpg",
     76                 "http://www.google.com/logos/2012/korea12-hp.png"
     77         };
     78 
     79         private static final int COPIES = 50;
     80 
     81         public MyAdapter() {
     82             mItems = new String[ITEMS.length * COPIES];
     83             for (int i = 0; i < COPIES; i++) {
     84                 for (int j = 0; j < ITEMS.length; j++) {
     85                     mItems[i * ITEMS.length + j] = ITEMS[j];
     86                 }
     87             }
     88         }
     89 
     90         @Override
     91         public int getCount() {
     92             return mItems.length;
     93         }
     94 
     95         @Override
     96         public Object getItem(int position) {
     97             return mItems[position];
     98         }
     99 
    100         @Override
    101         public long getItemId(int position) {
    102             return position;
    103         }
    104 
    105         @Override
    106         public View getView(int position, View convertView, ViewGroup parent) {
    107             BitmapView v;
    108             if (convertView != null) {
    109                 v = (BitmapView) convertView;
    110             } else {
    111                 v = new BitmapView(MainActivity.this);
    112                 ExtendedOptions opts = new ExtendedOptions(
    113                         ExtendedOptions.FEATURE_ORDERED_DISPLAY | ExtendedOptions.FEATURE_PARALLAX
    114                                 | ExtendedOptions.FEATURE_STATE_CHANGES, PLACEHOLDER, PROGRESS);
    115                 opts.decodeAggregator = mDecodeAggregator;
    116                 opts.parallaxSpeedMultiplier = NORMAL_PARALLAX_MULTIPLIER;
    117                 opts.backgroundColor = Color.LTGRAY;
    118                 final ExtendedBitmapDrawable drawable = new ExtendedBitmapDrawable(getResources(),
    119                         mCache, true /* limit density */, opts);
    120 
    121                 v.setTypedDrawable(drawable);
    122                 v.setListView(mListView);
    123             }
    124             v.getTypedDrawable().bind(new BitmapRequestKeyImpl(mItems[position]));
    125             return v;
    126         }
    127     }
    128 }
    129