CarouselTestActivity.java revision be5482f170e191aa98a3c2ecefdeaf936b7df412
15ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller/*
25ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Copyright (C) 2010 The Android Open Source Project
35ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller *
45ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Licensed under the Apache License, Version 2.0 (the "License");
55ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * you may not use this file except in compliance with the License.
65ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * You may obtain a copy of the License at
75ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller *
85ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller *      http://www.apache.org/licenses/LICENSE-2.0
95ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller *
105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Unless required by applicable law or agreed to in writing, software
115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * distributed under the License is distributed on an "AS IS" BASIS,
125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * See the License for the specific language governing permissions and
145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * limitations under the License.
155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */
165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpackage com.android.carouseltest;
185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport com.android.carouseltest.MyCarouselView;
207cc5787b49708f63aeb818bdd06efed3d4229925Jim Shumaimport com.android.ex.carousel.CarouselController;
215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport com.android.ex.carousel.CarouselView;
22a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport com.android.ex.carousel.CarouselViewHelper;
235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.app.Activity;
25a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.content.Context;
265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.res.Resources;
275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap;
285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.BitmapFactory;
295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Canvas;
305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Paint;
31420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Millerimport android.graphics.PixelFormat;
32a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.Rect;
335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.os.Bundle;
345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.util.Log;
355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpublic class CarouselTestActivity extends Activity {
37a3cb716626b477c98ba912698c765eab20f27286Jim Miller    private static final String TAG = "CarouselTestActivity";
385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    private static final int CARD_SLOTS = 56;
3943471a7e84593d0dd855ec5c66d70891a6fd4c81Jim Miller    private static final int TOTAL_CARDS = 100;
40420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller    private static final int TEXTURE_HEIGHT = 256;
41420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller    private static final int TEXTURE_WIDTH = 256;
425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    private static final int SLOTS_VISIBLE = 7;
43a3cb716626b477c98ba912698c765eab20f27286Jim Miller
447cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller    protected static final boolean DBG = false;
457cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller    private static final int DETAIL_TEXTURE_WIDTH = 200;
467cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller    private static final int DETAIL_TEXTURE_HEIGHT = 80;
47f7c724da4bb4fcd3cd02add04a7bb8052e07e4c3Jim Miller    private static final int VISIBLE_DETAIL_COUNT = 3;
482ba04e061b52c488a154739379501dc833e39f79Jim Miller    private static final boolean INCREMENTAL_ADD = false; // To debug incrementally adding cards
497cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma    private CarouselController mController;
505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    private CarouselView mView;
515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    private Paint mPaint = new Paint();
52a3cb716626b477c98ba912698c765eab20f27286Jim Miller    private CarouselViewHelper mHelper;
53a3cb716626b477c98ba912698c765eab20f27286Jim Miller    private Bitmap mGlossyOverlay;
54a3cb716626b477c98ba912698c765eab20f27286Jim Miller    private Bitmap mBorder;
55a3cb716626b477c98ba912698c765eab20f27286Jim Miller
56a3cb716626b477c98ba912698c765eab20f27286Jim Miller    class LocalCarouselViewHelper extends CarouselViewHelper {
57a3cb716626b477c98ba912698c765eab20f27286Jim Miller        private static final int PIXEL_BORDER = 3;
58a3cb716626b477c98ba912698c765eab20f27286Jim Miller        private DetailTextureParameters mDetailTextureParameters
59b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller                = new DetailTextureParameters(5.0f, 5.0f, 3.0f, 10.0f);
605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
61a3cb716626b477c98ba912698c765eab20f27286Jim Miller        LocalCarouselViewHelper(Context context) {
62a3cb716626b477c98ba912698c765eab20f27286Jim Miller            super(context);
63a3cb716626b477c98ba912698c765eab20f27286Jim Miller        }
64a3cb716626b477c98ba912698c765eab20f27286Jim Miller
65a3cb716626b477c98ba912698c765eab20f27286Jim Miller        @Override
66a3cb716626b477c98ba912698c765eab20f27286Jim Miller        public void onCardSelected(int id) {
67a3cb716626b477c98ba912698c765eab20f27286Jim Miller            Log.v(TAG, "Yay, card " + id + " was selected!");
68a3cb716626b477c98ba912698c765eab20f27286Jim Miller        }
69a3cb716626b477c98ba912698c765eab20f27286Jim Miller
70a3cb716626b477c98ba912698c765eab20f27286Jim Miller        @Override
71a3cb716626b477c98ba912698c765eab20f27286Jim Miller        public DetailTextureParameters getDetailTextureParameters(int id) {
72a3cb716626b477c98ba912698c765eab20f27286Jim Miller            return mDetailTextureParameters;
73a3cb716626b477c98ba912698c765eab20f27286Jim Miller        }
74a3cb716626b477c98ba912698c765eab20f27286Jim Miller
75a3cb716626b477c98ba912698c765eab20f27286Jim Miller        @Override
76a3cb716626b477c98ba912698c765eab20f27286Jim Miller        public Bitmap getTexture(int n) {
77a3cb716626b477c98ba912698c765eab20f27286Jim Miller            Bitmap bitmap = Bitmap.createBitmap(TEXTURE_WIDTH, TEXTURE_HEIGHT,
78a3cb716626b477c98ba912698c765eab20f27286Jim Miller                    Bitmap.Config.ARGB_8888);
79a3cb716626b477c98ba912698c765eab20f27286Jim Miller            Canvas canvas = new Canvas(bitmap);
80a3cb716626b477c98ba912698c765eab20f27286Jim Miller            canvas.drawARGB(0, 0, 0, 0);
81420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller            mPaint.setColor(0x40808080);
82420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller            canvas.drawRect(2, 2, TEXTURE_WIDTH-2, TEXTURE_HEIGHT-2, mPaint);
83a3cb716626b477c98ba912698c765eab20f27286Jim Miller            mPaint.setTextSize(100.0f);
84a3cb716626b477c98ba912698c765eab20f27286Jim Miller            mPaint.setAntiAlias(true);
85a3cb716626b477c98ba912698c765eab20f27286Jim Miller            mPaint.setColor(0xffffffff);
86420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller            canvas.drawText("" + n, 2, TEXTURE_HEIGHT-10, mPaint);
87a3cb716626b477c98ba912698c765eab20f27286Jim Miller            canvas.drawBitmap(mGlossyOverlay, null,
88a3cb716626b477c98ba912698c765eab20f27286Jim Miller                    new Rect(PIXEL_BORDER, PIXEL_BORDER,
89a3cb716626b477c98ba912698c765eab20f27286Jim Miller                            TEXTURE_WIDTH - PIXEL_BORDER, TEXTURE_HEIGHT - PIXEL_BORDER), mPaint);
90a3cb716626b477c98ba912698c765eab20f27286Jim Miller            return bitmap;
91a3cb716626b477c98ba912698c765eab20f27286Jim Miller        }
92a3cb716626b477c98ba912698c765eab20f27286Jim Miller
93a3cb716626b477c98ba912698c765eab20f27286Jim Miller        @Override
94a3cb716626b477c98ba912698c765eab20f27286Jim Miller        public Bitmap getDetailTexture(int n) {
95a3cb716626b477c98ba912698c765eab20f27286Jim Miller            Bitmap bitmap = Bitmap.createBitmap(DETAIL_TEXTURE_WIDTH, DETAIL_TEXTURE_HEIGHT,
96a3cb716626b477c98ba912698c765eab20f27286Jim Miller                    Bitmap.Config.ARGB_8888);
97a3cb716626b477c98ba912698c765eab20f27286Jim Miller            Canvas canvas = new Canvas(bitmap);
98420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller            canvas.drawARGB(32, 10, 10, 10);
99a3cb716626b477c98ba912698c765eab20f27286Jim Miller            mPaint.setTextSize(15.0f);
100a3cb716626b477c98ba912698c765eab20f27286Jim Miller            mPaint.setAntiAlias(true);
101a3cb716626b477c98ba912698c765eab20f27286Jim Miller            canvas.drawText("Detail text for card " + n, 0, DETAIL_TEXTURE_HEIGHT/2, mPaint);
102a3cb716626b477c98ba912698c765eab20f27286Jim Miller            return bitmap;
103a3cb716626b477c98ba912698c765eab20f27286Jim Miller        }
104a3cb716626b477c98ba912698c765eab20f27286Jim Miller    };
1055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
1065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    @Override
107420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller    public CharSequence onCreateDescription() {
108420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        return getText(R.string.carousel_test_activity_description);
109420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller    }
110420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller
1112ba04e061b52c488a154739379501dc833e39f79Jim Miller    private Runnable mAddCardRunnable = new Runnable() {
1122ba04e061b52c488a154739379501dc833e39f79Jim Miller        public void run() {
1132ba04e061b52c488a154739379501dc833e39f79Jim Miller            if (mView.getCardCount() < TOTAL_CARDS) {
1142ba04e061b52c488a154739379501dc833e39f79Jim Miller                mView.createCards(mView.getCardCount() + 1);
1152ba04e061b52c488a154739379501dc833e39f79Jim Miller                mView.postDelayed(mAddCardRunnable, 2000);
1162ba04e061b52c488a154739379501dc833e39f79Jim Miller            }
1172ba04e061b52c488a154739379501dc833e39f79Jim Miller        }
1182ba04e061b52c488a154739379501dc833e39f79Jim Miller    };
1192ba04e061b52c488a154739379501dc833e39f79Jim Miller
120420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller    @Override
1215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    protected void onCreate(Bundle savedInstanceState) {
1225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        super.onCreate(savedInstanceState);
1235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
1247cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma        mController = new CarouselController();
125fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller        setContentView(R.layout.carousel_test);
126fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller        mView = (CarouselView) findViewById(R.id.carousel);
127fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller        mView.getHolder().setFormat(PixelFormat.RGBA_8888);
1285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        mPaint.setColor(0xffffffff);
1295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        final Resources res = getResources();
1305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
131a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mHelper = new LocalCarouselViewHelper(this);
132a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mHelper.setCarouselView(mView);
1335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        mView.setSlotCount(CARD_SLOTS);
1342ba04e061b52c488a154739379501dc833e39f79Jim Miller        mView.createCards(INCREMENTAL_ADD ? 1: TOTAL_CARDS);
1355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        mView.setVisibleSlots(SLOTS_VISIBLE);
1365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        mView.setStartAngle((float) -(2.0f*Math.PI * 5 / CARD_SLOTS));
137a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mBorder = BitmapFactory.decodeResource(res, R.drawable.border);
138a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mView.setDefaultBitmap(mBorder);
139a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mView.setLoadingBitmap(mBorder);
140420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        mView.setBackgroundColor(0.25f, 0.25f, 0.5f, 0.5f);
141420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        mView.setRezInCardCount(3.0f);
142420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        mView.setFadeInDuration(250);
143f7c724da4bb4fcd3cd02add04a7bb8052e07e4c3Jim Miller        mView.setVisibleDetails(VISIBLE_DETAIL_COUNT);
144be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller        mView.setDragModel(CarouselView.DRAG_MODEL_PLANE);
1452ba04e061b52c488a154739379501dc833e39f79Jim Miller        if (INCREMENTAL_ADD) {
1462ba04e061b52c488a154739379501dc833e39f79Jim Miller            mView.postDelayed(mAddCardRunnable, 2000);
1472ba04e061b52c488a154739379501dc833e39f79Jim Miller        }
1485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
149a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mGlossyOverlay = BitmapFactory.decodeResource(res, R.drawable.glossy_overlay);
150420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller
151420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        /*
152420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        mView.setBackgroundColor(0x80ffffff);
153420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        int flags = WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
154420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
155420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller                mView.getWidth(), mView.getHeight(),
156420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller                WindowManager.LayoutParams.TYPE_APPLICATION,
157420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller                flags, PixelFormat.TRANSLUCENT);
158420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        getWindow().setAttributes(lp);
159420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller        */
1605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    }
1615ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
1625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    @Override
1635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    protected void onResume() {
1645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        super.onResume();
165a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mHelper.onResume();
1665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    }
1675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller
1685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    @Override
1695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller    protected void onPause() {
1705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller        super.onPause();
171a3cb716626b477c98ba912698c765eab20f27286Jim Miller        mHelper.onPause();
1727cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller    }
1737cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller
1745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller}
175