CarouselController.java revision 358868df5043b240c9a241c7bb75128ff94b1f34
1c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma/* 2c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Copyright (C) 2010 The Android Open Source Project 3c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 4c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Licensed under the Apache License, Version 2.0 (the "License"); 5c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * you may not use this file except in compliance with the License. 6c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * You may obtain a copy of the License at 7c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 8c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * http://www.apache.org/licenses/LICENSE-2.0 9c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 10c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Unless required by applicable law or agreed to in writing, software 11c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * distributed under the License is distributed on an "AS IS" BASIS, 12c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * See the License for the specific language governing permissions and 14c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * limitations under the License. 15c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 16c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 17c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumapackage com.android.ex.carousel; 18c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 19c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport com.android.ex.carousel.CarouselRS.CarouselCallback; 207cc5787b49708f63aeb818bdd06efed3d4229925Jim Shumaimport com.android.ex.carousel.CarouselView.DetailAlignment; 21c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 22c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.content.res.Resources; 23c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.graphics.Bitmap; 24c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.FileA3D; 25c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.Float4; 26c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.Mesh; 27c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.RenderScriptGL; 28c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.util.Log; 29c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 30c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma/** 31c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * <p> 32c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This class represents the basic building block for using a 3D Carousel. The Carousel is 33c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * basically a scene of cards and slots. The spacing between cards is dictated by the number 34c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * of slots and the radius. The number of visible cards dictates how far the Carousel can be moved. 35c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * If the number of cards exceeds the number of slots, then the Carousel will continue to go 36c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * around until the last card can be seen. 37c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 38c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumapublic class CarouselController { 39c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private final int DEFAULT_SLOT_COUNT = 10; 40c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private final float DEFAULT_RADIUS = 20.0f; 41c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private final int DEFAULT_VISIBLE_DETAIL_COUNT = 3; 424fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma private final int DEFAULT_PREFETCH_CARD_COUNT = 2; 430cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney private final int DEFAULT_ROW_COUNT = 1; 440cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney private final float DEFAULT_ROW_SPACING = 0.0f; 45c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private final float DEFAULT_SWAY_SENSITIVITY = 0.0f; 46c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private final float DEFAULT_FRICTION_COEFFICIENT = 10.0f; 47c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private final float DEFAULT_DRAG_FACTOR = 0.25f; 484a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney private final int DEFAULT_DETAIL_ALIGNMENT = 494a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney DetailAlignment.VIEW_TOP | DetailAlignment.LEFT; 50c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private CarouselRS mRenderScript; 51c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private RenderScriptGL mRS; 52c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private static final String TAG = "CarouselController"; 53c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private static final boolean DBG = false; 54c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 55c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma // These shadow the state of the renderer in case the surface changes so the surface 56c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma // can be restored to its previous state. 57c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private Bitmap mDefaultBitmap; 58c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private Bitmap mLoadingBitmap; 59c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private Bitmap mBackgroundBitmap; 60c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private Bitmap mDefaultLineBitmap = Bitmap.createBitmap( 615621100edc38c6e7f7fd7ef54945ba035204fe49Jim Shuma new int[] {0x00000000, 0xffffffff, 0x00000000}, 0, 3, 3, 1, Bitmap.Config.ARGB_4444); 62358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney private int mDefaultGeometry; 63358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney private int mLoadingGeometry; 6451dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney private float[] mDefaultCardMatrix; 65c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private int mCardCount = 0; 66c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private int mVisibleSlots = 0; 67c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private int mVisibleDetails = DEFAULT_VISIBLE_DETAIL_COUNT; 684fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma private int mPrefetchCardCount = DEFAULT_PREFETCH_CARD_COUNT; 694a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney private int mDetailTextureAlignment = DEFAULT_DETAIL_ALIGNMENT; 70fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller private boolean mForceBlendCardsWithZ = false; 71c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private boolean mDrawRuler = true; 72c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mStartAngle; 73a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich private float mCarouselRotationAngle; 74c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mRadius = DEFAULT_RADIUS; 75c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mCardRotation = 0.0f; 7683d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney private boolean mCardsFaceTangent = false; 77c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mSwaySensitivity = DEFAULT_SWAY_SENSITIVITY; 78c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mFrictionCoefficient = DEFAULT_FRICTION_COEFFICIENT; 79c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mDragFactor = DEFAULT_DRAG_FACTOR; 80c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private int mSlotCount = DEFAULT_SLOT_COUNT; 810cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney private int mRowCount = DEFAULT_ROW_COUNT; 820cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney private float mRowSpacing = DEFAULT_ROW_SPACING; 83c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mEye[] = { 20.6829f, 2.77081f, 16.7314f }; 84c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mAt[] = { 14.7255f, -3.40001f, -1.30184f }; 85c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mUp[] = { 0.0f, 1.0f, 0.0f }; 86c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private Float4 mBackgroundColor = new Float4(0.0f, 0.0f, 0.0f, 1.0f); 87c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private CarouselCallback mCarouselCallback; 88c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private float mRezInCardCount = 0.0f; 89c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private long mFadeInDuration = 250L; 90c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma private Bitmap mDetailLoadingBitmap = Bitmap.createBitmap( 91c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma new int[] {0}, 0, 1, 1, 1, Bitmap.Config.ARGB_4444); 92be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller private int mDragModel = CarouselRS.DRAG_MODEL_SCREEN_DELTA; 9314d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma private int mFillDirection = CarouselRS.FILL_DIRECTION_CCW; 94c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 95c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public CarouselController() { 96c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma boolean useDepthBuffer = true; 97c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 98c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 99c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setRS(RenderScriptGL rs, CarouselRS renderScript) { 100c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRS = rs; 101c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript = renderScript; 102c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 103c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 104c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void onSurfaceChanged() { 105c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setSlotCount(mSlotCount); 1069c019da0f3083c4b82552fb2fe5b052f90073cb9Bryan Mawhinney setDefaultCardMatrix(mDefaultCardMatrix); 107c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma createCards(mCardCount); 108c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setVisibleSlots(mVisibleSlots); 109c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setVisibleDetails(mVisibleDetails); 1104fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma setPrefetchCardCount(mPrefetchCardCount); 1110cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney setRowCount(mRowCount); 1120cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney setRowSpacing(mRowSpacing); 1134a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney setDetailTextureAlignment(mDetailTextureAlignment); 114fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller setForceBlendCardsWithZ(mForceBlendCardsWithZ); 115c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setDrawRuler(mDrawRuler); 116c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setCallback(mCarouselCallback); 117c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setDefaultBitmap(mDefaultBitmap); 118c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setLoadingBitmap(mLoadingBitmap); 119c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setDefaultGeometry(mDefaultGeometry); 120c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setLoadingGeometry(mLoadingGeometry); 121c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setBackgroundColor(mBackgroundColor.x, mBackgroundColor.y, mBackgroundColor.z, 122c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mBackgroundColor.w); 123c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setBackgroundBitmap(mBackgroundBitmap); 124c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setDetailLineBitmap(mDefaultLineBitmap); 125c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setStartAngle(mStartAngle); 126a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich setCarouselRotationAngle(mCarouselRotationAngle); 127c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setRadius(mRadius); 128c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setCardRotation(mCardRotation); 12983d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney setCardsFaceTangent(mCardsFaceTangent); 130c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setSwaySensitivity(mSwaySensitivity); 131c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setFrictionCoefficient(mFrictionCoefficient); 132c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setDragFactor(mDragFactor); 133be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller setDragModel(mDragModel); 13414d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma setFillDirection(mFillDirection); 135c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setLookAt(mEye, mAt, mUp); 136c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setRezInCardCount(mRezInCardCount); 137c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setFadeInDuration(mFadeInDuration); 138c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma setDetailLoadingBitmap(mDetailLoadingBitmap); 139c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 140c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 141c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 142c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Loads geometry from a resource id. 143c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 144c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param resId 145c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @return the loaded mesh or null if it cannot be loaded 146c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 147358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney public Mesh loadGeometry(int resId) { 148358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney if (mRenderScript != null) { 149358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney return mRenderScript.loadGeometry(resId); 150c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 151358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney return null; 152c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 153c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 154c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 155c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Load A3D file from resource. If resId == 0, will clear geometry for this item. 156c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n 157c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param resId 158c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 159c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setGeometryForItem(int n, Mesh mesh) { 160c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 161c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setGeometry(n, mesh); 162c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 163c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 164c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 165c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 166c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Set the number of slots around the Carousel. Basically equivalent to the poles horses 167c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * might attach to on a real Carousel. 168c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 169c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the number of slots 170c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 171c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setSlotCount(int n) { 172c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mSlotCount = n; 173c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 174c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setSlotCount(n); 175c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 176c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 177c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 178c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 179c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Sets the number of visible slots around the Carousel. This is primarily used as a cheap 180c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * form of clipping. The Carousel will never show more than this many cards. 181c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the number of visible slots 182c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 183c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setVisibleSlots(int n) { 184c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mVisibleSlots = n; 185c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 186c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setVisibleSlots(n); 187c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 188c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 189c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 190c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 191c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Set the number of detail textures that can be visible at one time. 192c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 193c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the number of slots 194c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 195c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setVisibleDetails(int n) { 196c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mVisibleDetails = n; 197c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 198c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setVisibleDetails(n); 199c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 200c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 201c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 202c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 2034fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * Set the number of cards to pre-load that are outside of the visible region, as determined by 2044fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * setVisibleSlots(). This number gets added to the number of visible slots and used to 2054fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * determine when resources for cards should be loaded. This number should be small (n <= 4) 2064fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * for systems with limited texture memory or views that show more than half dozen cards in the 2074fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * view. 2084fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * 2094fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * @param n the number of cards; should be even, so the count is the same on each side 2104fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma */ 2114fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma public void setPrefetchCardCount(int n) { 2124fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mPrefetchCardCount = n; 2134fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma if (mRenderScript != null) { 2144fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mRenderScript.setPrefetchCardCount(n); 2154fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2164fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2174fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma 2184fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma /** 2190cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney * Sets the number of rows of cards to show in each slot. 2200cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney */ 2210cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney public void setRowCount(int n) { 2220cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney mRowCount = n; 2230cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney if (mRenderScript != null) { 2240cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney mRenderScript.setRowCount(n); 2250cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney } 2260cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney } 2270cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney 2280cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney /** 2290cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney * Sets the spacing between each row of cards when rowCount > 1. 2300cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney */ 2310cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney public void setRowSpacing(float s) { 2320cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney mRowSpacing = s; 2330cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney if (mRenderScript != null) { 2340cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney mRenderScript.setRowSpacing(s); 2350cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney } 2360cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney } 2370cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney 2380cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney /** 2394a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney * Sets how detail textures are aligned with respect to the card. 240c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 2414a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney * @param alignment a bitmask of DetailAlignment flags. 242c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 2434a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney public void setDetailTextureAlignment(int alignment) { 2444a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney int xBits = alignment & DetailAlignment.HORIZONTAL_ALIGNMENT_MASK; 2454a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney if (xBits == 0 || ((xBits & (xBits - 1)) != 0)) { 2464a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney throw new IllegalArgumentException( 2474a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney "Must specify exactly one horizontal alignment flag"); 2484a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney } 2494a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney int yBits = alignment & DetailAlignment.VERTICAL_ALIGNMENT_MASK; 2504a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney if (yBits == 0 || ((yBits & (yBits - 1)) != 0)) { 2514a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney throw new IllegalArgumentException( 2524a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney "Must specify exactly one vertical alignment flag"); 253c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 254c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 2554a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney mDetailTextureAlignment = alignment; 2564fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma if (mRenderScript != null) { 2574a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney mRenderScript.setDetailTextureAlignment(alignment); 2584fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2594fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2604fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma 2614fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma /** 262fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * Set whether depth is enabled while blending. Generally, this is discouraged because 263fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * it causes bad artifacts. Careful attention to geometry and alpha transparency of 264fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * textures can mitigate much of this. Geometry for an individual item must be drawn 265fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * back-to-front, for example. 266bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma * 267fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * @param enabled True to enable depth while blending, and false to disable it. 268bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma */ 269fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller public void setForceBlendCardsWithZ(boolean enabled) { 270fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller mForceBlendCardsWithZ = enabled; 271bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma if (mRenderScript != null) { 272fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller mRenderScript.setForceBlendCardsWithZ(enabled); 273bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma } 274bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma } 275bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma 276bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma /** 277c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Set whether to draw a ruler from the card to the detail texture 278c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 279c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param drawRuler True to draw a ruler, false to draw nothing where the ruler would go. 280c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 281c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setDrawRuler(boolean drawRuler) { 282c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mDrawRuler = drawRuler; 283c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 284c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDrawRuler(drawRuler); 285c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 286c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 287c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 288c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 289c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This dictates how many cards are in the deck. If the number of cards is greater than the 290c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * number of slots, then the Carousel goes around n / slot_count times. 291c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 292c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Can be called again to increase or decrease the number of cards. 293c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 294c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the number of cards to create. 295c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 296c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void createCards(int n) { 297c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mCardCount = n; 298c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 299c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.createCards(n); 300c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 301c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 302c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 303c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public int getCardCount() { 304c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma return mCardCount; 305c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 306c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 307c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 308c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This sets the texture on card n. It should only be called in response to 309c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * {@link CarouselCallback#onRequestTexture(int)}. Since there's no guarantee 310c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * that a given texture is still on the screen, replacing this texture should be done 311c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * by first setting it to null and then waiting for the next 312c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * {@link CarouselCallback#onRequestTexture(int)} to swap it with the new one. 313c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 314c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the card given by {@link CarouselCallback#onRequestTexture(int)} 315c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap the bitmap image to show 316c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 317c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setTextureForItem(int n, Bitmap bitmap) { 318c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma // Also check against mRS, to handle the case where the result is being delivered by a 319c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma // background thread but the sender no longer exists. 320c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null && mRS != null) { 321c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (DBG) Log.v(TAG, "setTextureForItem(" + n + ")"); 322c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setTexture(n, bitmap); 323c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (DBG) Log.v(TAG, "done"); 324c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 325c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 326c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 327c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 328c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This sets the detail texture that floats above card n. It should only be called in response 329c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * to {@link CarouselCallback#onRequestDetailTexture(int)}. Since there's no guarantee 330c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * that a given texture is still on the screen, replacing this texture should be done 331c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * by first setting it to null and then waiting for the next 332c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * {@link CarouselCallback#onRequestDetailTexture(int)} to swap it with the new one. 333c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 334c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the card to set detail texture for 335c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param offx an optional offset to apply to the texture (in pixels) from top of detail line 336c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param offy an optional offset to apply to the texture (in pixels) from top of detail line 337c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param loffx an optional offset to apply to the line (in pixels) from left edge of card 338c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param loffy an optional offset to apply to the line (in pixels) from top of screen 339c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap the bitmap to show as the detail 340c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 341c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setDetailTextureForItem(int n, float offx, float offy, float loffx, float loffy, 342c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma Bitmap bitmap) { 3437ec486bf1373232a35efa96622f31ac1aff5456bBryan Mawhinney if (mRenderScript != null && mRS != null) { 344c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (DBG) Log.v(TAG, "setDetailTextureForItem(" + n + ")"); 345c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDetailTexture(n, offx, offy, loffx, loffy, bitmap); 346c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (DBG) Log.v(TAG, "done"); 3476af401bca5f8854524d128e9df5700035fae1160Jim Shuma } 3486af401bca5f8854524d128e9df5700035fae1160Jim Shuma } 3496af401bca5f8854524d128e9df5700035fae1160Jim Shuma 3506af401bca5f8854524d128e9df5700035fae1160Jim Shuma /** 3518441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * Sets the specified texture as invalid. If {@code eraseCurrent} is true, 3528441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * the texture will be immediately cleared from view and an invalidate 3538441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * handler will be called. If {@code eraseCurrent} is false, a replacement 3548441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * texture will be requested, and the old texture will be left in place in 3558441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * the meantime. 3568441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * 3578441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * @param n the card to invalidate the detail texture for 3588441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey * @param eraseCurrent whether to erase the current texture 3598441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey */ 3608441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey public void invalidateTexture(int n, boolean eraseCurrent) { 3618441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey if (mRenderScript != null && mRS != null) { 3628441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey if (DBG) Log.v(TAG, "invalidateTexture(" + n + ", " + eraseCurrent + ")"); 3638441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey mRenderScript.invalidateTexture(n, eraseCurrent); 3648441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey if (DBG) Log.v(TAG, "done"); 3658441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey } 3668441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey } 3678441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey 3688441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey /** 3696af401bca5f8854524d128e9df5700035fae1160Jim Shuma * Sets the specified detail texture as invalid. If eraseCurrent is true, the texture will be 3706af401bca5f8854524d128e9df5700035fae1160Jim Shuma * immediately cleared from view and an invalidate handler will be called. If eraseCurrent is 3716af401bca5f8854524d128e9df5700035fae1160Jim Shuma * false, a replacement texture will be requested, and the old texture will be left in place 3726af401bca5f8854524d128e9df5700035fae1160Jim Shuma * in the meantime. 3736af401bca5f8854524d128e9df5700035fae1160Jim Shuma * @param n the card to invalidate the detail texture for 3746af401bca5f8854524d128e9df5700035fae1160Jim Shuma * @param eraseCurrent whether to erase the current texture 3756af401bca5f8854524d128e9df5700035fae1160Jim Shuma */ 3766af401bca5f8854524d128e9df5700035fae1160Jim Shuma public void invalidateDetailTexture(int n, boolean eraseCurrent) { 3776af401bca5f8854524d128e9df5700035fae1160Jim Shuma if (mRenderScript != null && mRS != null) { 3788441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey if (DBG) Log.v(TAG, "invalidateDetailTexture(" + n + ", " + eraseCurrent + ")"); 3798441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey mRenderScript.invalidateDetailTexture(n, eraseCurrent); 3806af401bca5f8854524d128e9df5700035fae1160Jim Shuma if (DBG) Log.v(TAG, "done"); 381c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 382c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 383c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 384c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 385c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Sets the bitmap to show on a card when the card draws the very first time. 386c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Generally, this bitmap will only be seen during the first few frames of startup 387c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * or when the number of cards are changed. It can be ignored in most cases, 388c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * as the cards will generally only be in the loading or loaded state. 389c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 390c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap 391c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 392c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setDefaultBitmap(Bitmap bitmap) { 393c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mDefaultBitmap = bitmap; 394c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 395c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDefaultBitmap(bitmap); 396c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 397c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 398c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 399c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 400c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Sets the bitmap to show on the card while the texture is loading. It is set to this 401c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * value just before {@link CarouselCallback#onRequestTexture(int)} is called and changed 402c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * when {@link CarouselView#setTextureForItem(int, Bitmap)} is called. It is shared by all 403c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * cards. 404c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 405c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap 406c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 407c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setLoadingBitmap(Bitmap bitmap) { 408c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mLoadingBitmap = bitmap; 409c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 410c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setLoadingBitmap(bitmap); 411c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 412c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 413c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 414c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 415c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Sets background to specified color. If a background texture is specified with 416c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * {@link CarouselView#setBackgroundBitmap(Bitmap)}, then this call has no effect. 417c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 418c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param red the amount of red 419c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param green the amount of green 420c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param blue the amount of blue 421c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param alpha the amount of alpha 422c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 423c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setBackgroundColor(float red, float green, float blue, float alpha) { 424c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mBackgroundColor = new Float4(red, green, blue, alpha); 425c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 426c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setBackgroundColor(mBackgroundColor); 427c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 428c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 429c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 430c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 431c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Can be used to optionally set the background to a bitmap. When set to something other than 4324fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * null, this overrides {@link CarouselController#setBackgroundColor(Float4)}. 433c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 434c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap 435c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 436c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setBackgroundBitmap(Bitmap bitmap) { 437c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mBackgroundBitmap = bitmap; 438c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 439c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setBackgroundTexture(bitmap); 440c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 441c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 442c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 443c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 444c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Can be used to optionally set a "loading" detail bitmap. Typically, this is just a black 445c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * texture with alpha = 0 to allow details to slowly fade in. 446c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 447c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap 448c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 449c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setDetailLoadingBitmap(Bitmap bitmap) { 450c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mDetailLoadingBitmap = bitmap; 451c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 452c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDetailLoadingTexture(bitmap); 453c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 454c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 455c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 456c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 457c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This texture is used to draw a line from the card alongside the texture detail. The line 458c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * will be as wide as the texture. It can be used to give the line glow effects as well as 459c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * allowing other blending effects. It is typically one dimensional, e.g. 3x1. 460c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 461c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param bitmap 462c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 463c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setDetailLineBitmap(Bitmap bitmap) { 464c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mDefaultLineBitmap = bitmap; 465c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 466c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDetailLineTexture(bitmap); 467c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 468c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 469c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 470c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 471c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This geometry will be shown when no geometry has been loaded for a given slot. If not set, 472fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * a quad will be drawn in its place. It is shared for all cards. If something other than 473fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * simple planar geometry is used, consider enabling depth test with 474fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * {@link CarouselController#setForceBlendCardsWithZ(boolean)} 475c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 476c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param mesh 477c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 478358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney public void setDefaultGeometry(int resId) { 479358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney mDefaultGeometry = resId; 480c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 481358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney Mesh mesh = mRenderScript.loadGeometry(resId); 482c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDefaultGeometry(mesh); 483c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 484c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 485c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 486c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 48751dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney * Sets the matrix used to transform card geometries. By default, this 48851dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney * is the identity matrix, but you can specify a different matrix if you 48951dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney * want to scale, translate and / or rotate the card before drawing. 49051dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney * 49151dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney * @param matrix array of 9 or 16 floats representing a 3x3 or 4x4 matrix, 49251dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney * or null as a shortcut for an identity matrix. 49351dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney */ 49451dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney public void setDefaultCardMatrix(float[] matrix) { 49551dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney mDefaultCardMatrix = matrix; 49651dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney if (mRenderScript != null) { 49751dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney mRenderScript.setDefaultCardMatrix(matrix); 49851dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney } 49951dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney } 50051dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney 50151dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney /** 502c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This is an intermediate version of the object to show while geometry is loading. If not set, 503fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * a quad will be drawn in its place. It is shared for all cards. If something other than 504fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * simple planar geometry is used, consider enabling depth test with 505fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller * {@link CarouselView#setForceBlendCardsWithZ(boolean)} 506c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 507358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney * @param resId 508c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 509358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney public void setLoadingGeometry(int resId) { 510358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney mLoadingGeometry = resId; 511c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 512358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney Mesh mesh = mRenderScript.loadGeometry(resId); 513c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setLoadingGeometry(mesh); 514c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 515c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 516c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 517c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 518c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Sets the callback for receiving events from RenderScript. 519c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 520c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param callback 521c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 522c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setCallback(CarouselCallback callback) 523c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma { 524c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mCarouselCallback = callback; 525c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 526c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setCallback(callback); 527c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 528c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 529c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 530c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 531594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * Gets the callback for receiving events from Renderscript. 532594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma */ 533594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma public CarouselCallback getCallback() { 534594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return mCarouselCallback; 535594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 536594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 537594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma /** 538c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Sets the startAngle for the Carousel. The start angle is the first position of the first 539c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * slot draw. Cards will be drawn from this angle in a counter-clockwise manner around the 540c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Carousel. 541c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 542c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param angle the angle, in radians. 543c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 544c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setStartAngle(float angle) 545c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma { 546c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mStartAngle = angle; 547c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 548c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setStartAngle(angle); 549c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 550c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 551c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 552a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich /** 553a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * Set the current carousel rotation angle, in card units. 554a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * This is measured in card positions, not in radians or degrees. 555a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * 556a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * A value of 0.0 means that card 0 is in the home position. 557a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * A value of 1.0 means that card 1 is in the home position, and so on. 558a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * The maximum value will be somewhat less than the total number of cards. 559a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * 560a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * @param angle 561a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich */ 562a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich public void setCarouselRotationAngle(float angle) { 563a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich mCarouselRotationAngle = angle; 564a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich if (mRenderScript != null) { 565a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich mRenderScript.setCarouselRotationAngle(angle); 566a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich } 567a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich } 568a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich 569c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setRadius(float radius) { 570c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRadius = radius; 571c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 572c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setRadius(radius); 573c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 574c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 575c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 576be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller /** 577be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * Sets the current model for dragging. There are currently four drag models: 578be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * {@link CarouselView#DRAG_MODEL_SCREEN_DELTA} 579be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * {@link CarouselView#DRAG_MODEL_PLANE} 580be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * {@link CarouselView#DRAG_MODEL_CYLINDER_INSIDE} 581be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * {@link CarouselView#DRAG_MODEL_CYLINDER_OUTSIDE} 582be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * 583be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller * @param model 584be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller */ 585be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller public void setDragModel(int model) { 586be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller mDragModel = model; 587be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller if (mRenderScript != null) { 588be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller mRenderScript.setDragModel(model); 589be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller } 590be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller } 591be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller 59214d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma /** Sets the direction to fill in cards around the carousel. 59314d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma * 59414d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma * @param direction Either {@link CarouselRS#FILL_DIRECTION_CCW} or 59514d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma * {@link CarouselRS#FILL_DIRECTION_CW}. 59614d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma */ 59714d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma public void setFillDirection(int direction) { 59814d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma mFillDirection = direction; 59914d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma if (mRenderScript != null) { 60014d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma mRenderScript.setFillDirection(direction); 60114d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma } 60214d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma } 60314d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma 604c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setCardRotation(float cardRotation) { 605c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mCardRotation = cardRotation; 606c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 607c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setCardRotation(cardRotation); 608c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 609c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 610c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 61183d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney public void setCardsFaceTangent(boolean faceTangent) { 61283d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney mCardsFaceTangent = faceTangent; 61383d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney if (mRenderScript != null) { 61483d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney mRenderScript.setCardsFaceTangent(faceTangent); 61583d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney } 61683d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney } 61783d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney 618c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setSwaySensitivity(float swaySensitivity) { 619c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mSwaySensitivity = swaySensitivity; 620c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 621c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setSwaySensitivity(swaySensitivity); 622c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 623c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 624c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 625c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setFrictionCoefficient(float frictionCoefficient) { 626c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mFrictionCoefficient = frictionCoefficient; 627c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 628c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setFrictionCoefficient(frictionCoefficient); 629c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 630c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 631c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 632c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setDragFactor(float dragFactor) { 633c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mDragFactor = dragFactor; 634c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 635c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setDragFactor(dragFactor); 636c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 637c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 638c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 639c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setLookAt(float[] eye, float[] at, float[] up) { 640c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mEye = eye; 641c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mAt = at; 642c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mUp = up; 643c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 644c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setLookAt(eye, at, up); 645c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 646c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 647c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 648c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 649c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This sets the number of cards in the distance that will be shown "rezzing in". 650c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * These alpha values will be faded in from the background to the foreground over 651c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 'n' cards. A floating point value is used to allow subtly changing the rezzing in 652c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * position. 653c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 654c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param n the number of cards to rez in. 655c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 656c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setRezInCardCount(float n) { 657c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRezInCardCount = n; 658c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 659c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setRezInCardCount(n); 660c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 661c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 662c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 663c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 664c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This sets the duration (in ms) that a card takes to fade in when loaded via a call 665c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * to {@link CarouselView#setTextureForItem(int, Bitmap)}. The timer starts the 666c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * moment {@link CarouselView#setTextureForItem(int, Bitmap)} is called and continues 667c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * until all of the cards have faded in. Note: using large values will extend the 668c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * animation until all cards have faded in. 669c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * 670c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param t 671c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 672c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma public void setFadeInDuration(long t) { 673c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mFadeInDuration = t; 674c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma if (mRenderScript != null) { 675c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma mRenderScript.setFadeInDuration(t); 676c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 677c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 678c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 679c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 680c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Tells the carousel that a touch event has started at the designated location. 681c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param x The number of pixels from the left edge that the event occurred 682c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param y The number of pixels from the top edge that the event occurred 6831882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller * @param t The time stamp of the event 684c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 6851882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller public void onTouchStarted(float x, float y, long t) { 6861882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller mRenderScript.doStart(x, y, t); 687c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 688c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 689c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 690c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Tells the carousel that a touch event has moved to the designated location. 691c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param x The number of pixels from the left edge that the event occurred 692c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param y The number of pixels from the top edge that the event occurred 6931882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller * @param t The time stamp of the event 694c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 6951882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller public void onTouchMoved(float x, float y, long t) { 6961882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller mRenderScript.doMotion(x, y, t); 697c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 698c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma 699c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma /** 700594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * Tells the carousel that the user has long-pressed. 701594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma */ 702594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma public void onLongPress() { 703594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma mRenderScript.doLongPress(); 704594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 705594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 706594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma /** 707c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Tells the carousel that a touch event has stopped at the designated location. 708c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param x The number of pixels from the left edge that the event occurred 709c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * @param y The number of pixels from the top edge that the event occurred 7101882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller * @param t The time stamp of the event 711c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */ 7121882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller public void onTouchStopped(float x, float y, long t) { 7131882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller mRenderScript.doStop(x, y, t); 714c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma } 715c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma} 716