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.content.Context; 202e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport android.graphics.Canvas; 21d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport android.util.AttributeSet; 222e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport android.widget.ListView; 23d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 242e4d0863dba53435372ec96538f2ef3e1c3675bfMark Weiimport com.android.bitmap.drawable.ExtendedBitmapDrawable; 259c6ac19d4a3d39b7c2992060957920118ff56a65Mark Weiimport com.android.bitmap.view.BitmapDrawableImageView; 26d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 279c6ac19d4a3d39b7c2992060957920118ff56a65Mark Weipublic class BitmapView extends BitmapDrawableImageView { 282e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private final float mDensity; 292e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 302e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei private ListView mListView; 31d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 32d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public BitmapView(Context c) { 33d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein this(c, null); 34d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 35d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 36d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein public BitmapView(Context c, AttributeSet attrs) { 37d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein super(c, attrs); 38d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein mDensity = getResources().getDisplayMetrics().density; 39d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 40d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 41d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 42d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein protected int getSuggestedMinimumHeight() { 43d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein return (int) (100 * mDensity); 44d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein } 45d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein 46d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein @Override 47d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein protected void onSizeChanged(final int w, final int h, int oldw, int oldh) { 4889e59f00d67791754e44e65413baa95f94056df4Mark Wei ExtendedBitmapDrawable drawable = getTypedDrawable(); 4989e59f00d67791754e44e65413baa95f94056df4Mark Wei drawable.setDecodeDimensions(w, h); 502e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei } 512e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 522e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei public void setListView(final ListView listView) { 532e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei mListView = listView; 542e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei } 552e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 562e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei @Override 572e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei protected void onDraw(final Canvas canvas) { 5889e59f00d67791754e44e65413baa95f94056df4Mark Wei ExtendedBitmapDrawable drawable = getTypedDrawable(); 592e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei float fraction = (float) getBottom() / (mListView.getHeight() + getHeight()); 602e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei drawable.setParallaxFraction(fraction); 612e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei 622e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei super.onDraw(canvas); 632e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei } 64d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein}