MainActivity.java revision 2e4d0863dba53435372ec96538f2ef3e1c3675bf
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; 212e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport android.graphics.drawable.Drawable; 22d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.os.Bundle; 23d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.view.View; 24d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.view.ViewGroup; 25d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.widget.BaseAdapter; 26d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.widget.ListView; 27d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 28d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport com.android.bitmap.BitmapCache; 292e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport com.android.bitmap.DecodeAggregator; 30d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport com.android.bitmap.UnrefedBitmapCache; 312e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport com.android.bitmap.drawable.ExtendedBitmapDrawable; 32d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 33d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinpublic class MainActivity extends Activity { 342e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 35d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private ListView mListView; 362e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private final BitmapCache mCache = new UnrefedBitmapCache(TARGET_CACHE_SIZE_BYTES, 0.1f, 0); 372e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private final DecodeAggregator mDecodeAggregator = new DecodeAggregator(); 38d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 392e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private static Drawable PLACEHOLDER; 402e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private static Drawable PROGRESS; 412e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 422e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private static final float NORMAL_PARALLAX_MULTIPLIER = 1.5f; 43d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private static final int TARGET_CACHE_SIZE_BYTES = 5 * 1024 * 1024; 44d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 45d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 46d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein protected void onCreate(Bundle savedInstanceState) { 47d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein super.onCreate(savedInstanceState); 48d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein setContentView(R.layout.activity_main); 492e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 502e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei if (PLACEHOLDER == null) { 512e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei Resources res = getResources(); 522e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei PLACEHOLDER = res.getDrawable(R.drawable.ic_placeholder); 532e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei PROGRESS = res.getDrawable(R.drawable.progress); 542e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei } 552e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 56d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mListView = (ListView) findViewById(R.id.list); 57d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mListView.setAdapter(new MyAdapter()); 58d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 59d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 60d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private class MyAdapter extends BaseAdapter { 61d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 62d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private final String[] mItems; 63d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 64d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private final String[] ITEMS = new String[]{ 65d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "https://www.google.com/images/srpr/logo4w.png", 66d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/celibidache12-hp.jpg", 67d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/clara_schuman-2012-hp.jpg", 68d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2011/royalwedding11-hp.png", 69d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/vets_day-12-hp.jpg", 70d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2011/firstmaninspace11-hp-js.jpg", 71d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2011/nat-sov-and-childrens-turkey-hp.png", 72d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/First_Day_Of_School_Isreal-2012-hp.jpg", 73d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/celibidache12-hp.jpg", 74d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein "http://www.google.com/logos/2012/korea12-hp.png" 75d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein }; 76d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 77d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein private static final int COPIES = 50; 78d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 79d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public MyAdapter() { 80d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mItems = new String[ITEMS.length * COPIES]; 81d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein for (int i = 0; i < COPIES; i++) { 82d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein for (int j = 0; j < ITEMS.length; j++) { 83d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mItems[i * ITEMS.length + j] = ITEMS[j]; 84d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 85d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 86d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 87d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 88d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 89d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public int getCount() { 90d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return mItems.length; 91d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 92d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 93d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 94d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public Object getItem(int position) { 95d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return mItems[position]; 96d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 97d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 98d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 99d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public long getItemId(int position) { 100d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return position; 101d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 102d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 103d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 104d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public View getView(int position, View convertView, ViewGroup parent) { 105d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein BitmapView v; 106d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein if (convertView != null) { 107d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein v = (BitmapView) convertView; 108d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } else { 109d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein v = new BitmapView(MainActivity.this); 1102e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei final ExtendedBitmapDrawable drawable = new ExtendedBitmapDrawable(getResources(), 1112e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei mCache, true /* limit density */, mDecodeAggregator, PLACEHOLDER, PROGRESS); 1122e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei drawable.setParallaxSpeedMultiplier(NORMAL_PARALLAX_MULTIPLIER); 1132e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 1149c6ac19d4a3d39b7c2992060957920118ff56a65Mark Wei v.setBasicBitmapDrawable(drawable); 1152e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei v.setListView(mListView); 1162e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei v.setParallaxSpeedMultiplier(NORMAL_PARALLAX_MULTIPLIER); 117d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 1189c6ac19d4a3d39b7c2992060957920118ff56a65Mark Wei v.getBasicBitmapDrawable().bind(new BitmapRequestKeyImpl(mItems[position])); 119d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return v; 120d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 121d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 122d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein} 123