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}