125ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein/* 225ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * Copyright (C) 2013 The Android Open Source Project 325ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * 425ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * Licensed under the Apache License, Version 2.0 (the "License"); 525ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * you may not use this file except in compliance with the License. 625ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * You may obtain a copy of the License at 725ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * 825ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * http://www.apache.org/licenses/LICENSE-2.0 925ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * 1025ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * Unless required by applicable law or agreed to in writing, software 1125ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * distributed under the License is distributed on an "AS IS" BASIS, 1225ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1325ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * See the License for the specific language governing permissions and 1425ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein * limitations under the License. 1525ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein */ 1625ad6f98516a7af1ca71cfa07fb503d46dc8a7f1Sam Blitzstein 17d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinpackage com.example.bitmapsample; 18d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 19d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.app.Activity; 202e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport android.content.res.Resources; 215030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Weiimport android.graphics.Color; 222e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport android.graphics.drawable.Drawable; 23d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.os.Bundle; 24d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.view.View; 25d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.view.ViewGroup; 26d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.widget.BaseAdapter; 27d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.widget.ListView; 28d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 29d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport com.android.bitmap.BitmapCache; 302e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport com.android.bitmap.DecodeAggregator; 31d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport com.android.bitmap.UnrefedBitmapCache; 322e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport com.android.bitmap.drawable.ExtendedBitmapDrawable; 335030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Weiimport com.android.bitmap.drawable.ExtendedBitmapDrawable.ExtendedOptions; 34d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 35d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinpublic class MainActivity extends Activity { 362e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 37d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private ListView mListView; 385030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei private final BitmapCache mCache = new UnrefedBitmapCache(TARGET_CACHE_SIZE_BYTES, 0, 0); 392e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private final DecodeAggregator mDecodeAggregator = new DecodeAggregator(); 40d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 412e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private static Drawable PLACEHOLDER; 422e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private static Drawable PROGRESS; 432e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 442e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private static final float NORMAL_PARALLAX_MULTIPLIER = 1.5f; 45d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private static final int TARGET_CACHE_SIZE_BYTES = 5 * 1024 * 1024; 46d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 47d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 48d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein protected void onCreate(Bundle savedInstanceState) { 49d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein super.onCreate(savedInstanceState); 50d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein setContentView(R.layout.activity_main); 512e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 522e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei if (PLACEHOLDER == null) { 532e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei Resources res = getResources(); 542e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei PLACEHOLDER = res.getDrawable(R.drawable.ic_placeholder); 552e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei PROGRESS = res.getDrawable(R.drawable.progress); 562e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei } 572e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 58d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mListView = (ListView) findViewById(R.id.list); 59d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mListView.setAdapter(new MyAdapter()); 60d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 61d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 62d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private class MyAdapter extends BaseAdapter { 63d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 64d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private final String[] mItems; 65d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 66d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private final String[] ITEMS = new String[]{ 67d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "https://www.google.com/images/srpr/logo4w.png", 68d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/celibidache12-hp.jpg", 69d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/clara_schuman-2012-hp.jpg", 70d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2011/royalwedding11-hp.png", 71d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/vets_day-12-hp.jpg", 72d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2011/firstmaninspace11-hp-js.jpg", 73d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2011/nat-sov-and-childrens-turkey-hp.png", 74d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/First_Day_Of_School_Isreal-2012-hp.jpg", 75d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/celibidache12-hp.jpg", 76d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/korea12-hp.png" 77d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein }; 78d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 79d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private static final int COPIES = 50; 80d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 81d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public MyAdapter() { 82d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mItems = new String[ITEMS.length * COPIES]; 83d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein for (int i = 0; i < COPIES; i++) { 84d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein for (int j = 0; j < ITEMS.length; j++) { 85d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mItems[i * ITEMS.length + j] = ITEMS[j]; 86d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 87d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 88d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 89d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 90d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 91d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public int getCount() { 92d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return mItems.length; 93d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 94d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 95d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 96d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public Object getItem(int position) { 97d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return mItems[position]; 98d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 99d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 100d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 101d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public long getItemId(int position) { 102d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return position; 103d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 104d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 105d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 106d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public View getView(int position, View convertView, ViewGroup parent) { 107d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein BitmapView v; 108d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein if (convertView != null) { 109d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein v = (BitmapView) convertView; 110d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } else { 111d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein v = new BitmapView(MainActivity.this); 1125030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei ExtendedOptions opts = new ExtendedOptions( 1135030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei ExtendedOptions.FEATURE_ORDERED_DISPLAY | ExtendedOptions.FEATURE_PARALLAX 1145030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei | ExtendedOptions.FEATURE_STATE_CHANGES, PLACEHOLDER, PROGRESS); 1155030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei opts.decodeAggregator = mDecodeAggregator; 1165030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei opts.parallaxSpeedMultiplier = NORMAL_PARALLAX_MULTIPLIER; 1175030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei opts.backgroundColor = Color.LTGRAY; 1182e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei final ExtendedBitmapDrawable drawable = new ExtendedBitmapDrawable(getResources(), 1195030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei mCache, true /* limit density */, opts); 1202e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 12189e59f00d67791754e44e65413baa95f94056df4Mark Wei v.setTypedDrawable(drawable); 1222e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei v.setListView(mListView); 123d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 12489e59f00d67791754e44e65413baa95f94056df4Mark Wei v.getTypedDrawable().bind(new BitmapRequestKeyImpl(mItems[position])); 125d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return v; 126d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 127d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 128d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein} 129