CarouselView.java revision bfc5ce2da9e0d8d0ec2535c465624574d98418d7
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.ex.carousel; 185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 19594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shumaimport android.view.View; 205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport com.android.ex.carousel.CarouselRS.CarouselCallback; 215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.Context; 235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.res.Resources; 245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap; 25a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.PixelFormat; 265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap.Config; 275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.FileA3D; 28b0f070636c29ad178f4e21306f301fe3d20c183bJim Millerimport android.renderscript.Float4; 295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.Mesh; 305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.RSSurfaceView; 315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.RenderScriptGL; 325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.util.AttributeSet; 335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.util.Log; 345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.view.MotionEvent; 355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.view.SurfaceHolder; 365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 377cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller/** 387cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * <p> 397cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This class represents the basic building block for using a 3D Carousel. The Carousel is 407cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * basically a scene of cards and slots. The spacing between cards is dictated by the number 417cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * of slots and the radius. The number of visible cards dictates how far the Carousel can be moved. 427cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * If the number of cards exceeds the number of slots, then the Carousel will continue to go 437cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * around until the last card can be seen. 447cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpublic abstract class CarouselView extends RSSurfaceView { 465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final boolean USE_DEPTH_BUFFER = true; 475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private final int DEFAULT_SLOT_COUNT = 10; 48c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private final float DEFAULT_RADIUS = 20.0f; 497c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma private final int DEFAULT_VISIBLE_DETAIL_COUNT = 3; 504fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma private final int DEFAULT_PREFETCH_CARD_COUNT = 2; 51c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private final float DEFAULT_SWAY_SENSITIVITY = 0.0f; 52c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private final float DEFAULT_FRICTION_COEFFICIENT = 10.0f; 53c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private final float DEFAULT_DRAG_FACTOR = 0.25f; 545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final String TAG = "CarouselView"; 557cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller private static final boolean DBG = false; 565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private CarouselRS mRenderScript; 575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private RenderScriptGL mRS; 585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Context mContext; 595ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private boolean mTracking; 609afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller 617cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller // These shadow the state of the renderer in case the surface changes so the surface 627cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller // can be restored to its previous state. 635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Bitmap mDefaultBitmap; 645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Bitmap mLoadingBitmap; 659afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller private Bitmap mBackgroundBitmap; 667cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller private Bitmap mDefaultLineBitmap = Bitmap.createBitmap( 672ba04e061b52c488a154739379501dc833e39f79Jim Miller new int[] {0x00000000, 0xffffffff, 0x00000000}, 0, 3, 3, 1, Bitmap.Config.ARGB_4444); 685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Mesh mDefaultGeometry; 695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Mesh mLoadingGeometry; 705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private int mCardCount = 0; 715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private int mVisibleSlots = 0; 727c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma private int mVisibleDetails = DEFAULT_VISIBLE_DETAIL_COUNT; 734fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma private int mPrefetchCardCount = DEFAULT_PREFETCH_CARD_COUNT; 747c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma private boolean mDrawDetailBelowCard = false; 754fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma private boolean mDetailTexturesCentered = false; 76bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma private boolean mDrawCardsWithBlending = true; 777c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma private boolean mDrawRuler = true; 785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private float mStartAngle; 79c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mRadius = DEFAULT_RADIUS; 80c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mCardRotation = 0.0f; 8183d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney private boolean mCardsFaceTangent = false; 82c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mSwaySensitivity = DEFAULT_SWAY_SENSITIVITY; 83c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mFrictionCoefficient = DEFAULT_FRICTION_COEFFICIENT; 84c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mDragFactor = DEFAULT_DRAG_FACTOR; 855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private int mSlotCount = DEFAULT_SLOT_COUNT; 86c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mEye[] = { 20.6829f, 2.77081f, 16.7314f }; 87c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mAt[] = { 14.7255f, -3.40001f, -1.30184f }; 88c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mUp[] = { 0.0f, 1.0f, 0.0f }; 896b1fa13e79a6ae467d16da223fd36db53fa5a5cbJim Miller private Float4 mBackgroundColor = new Float4(0.0f, 0.0f, 0.0f, 1.0f); 90a3cb716626b477c98ba912698c765eab20f27286Jim Miller private CarouselCallback mCarouselCallback; 91420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private float mRezInCardCount = 0.0f; 92420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private long mFadeInDuration = 250L; 93420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private Bitmap mDetailLoadingBitmap = Bitmap.createBitmap( 94420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller new int[] {0}, 0, 1, 1, 1, Bitmap.Config.ARGB_4444); 955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static class Info { 979afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller public Info(int _resId) { resId = _resId; } 985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public int resId; // resource for renderscript resource (e.g. R.raw.carousel) 995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public abstract Info getRenderScriptInfo(); 1025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public CarouselView(Context context) { 1045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller this(context, null); 1055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 1085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Constructor used when this widget is created from a layout file. 1095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public CarouselView(Context context, AttributeSet attrs) { 1115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super(context, attrs); 1125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mContext = context; 1135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller boolean useDepthBuffer = true; 114e386bbba584685f6261e6dc846c9d05c79b53535Bryan Mawhinney ensureRenderScript(); 1155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // TODO: add parameters to layout 116594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 117594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma setOnLongClickListener(new OnLongClickListener() { 118594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma public boolean onLongClick(View v) { 119594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma if (interpretLongPressEvents()) { 120594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma mRenderScript.doLongPress(); 121594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return true; 122594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } else { 123594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return false; 124594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 125594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 126594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma }); 1275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void ensureRenderScript() { 130e386bbba584685f6261e6dc846c9d05c79b53535Bryan Mawhinney if (mRS == null) { 131fc1960b04f7746f8bdb13cc5bf3297fe0928c851Jason Sams RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); 132fc1960b04f7746f8bdb13cc5bf3297fe0928c851Jason Sams sc.setDepth(16, 24); 133fc1960b04f7746f8bdb13cc5bf3297fe0928c851Jason Sams mRS = createRenderScript(sc); 134e386bbba584685f6261e6dc846c9d05c79b53535Bryan Mawhinney } 135a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller if (mRenderScript == null) { 136a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller mRenderScript = new CarouselRS(mRS, getResources(), getRenderScriptInfo().resId); 137a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller mRenderScript.resumeRendering(); 138a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller } 1395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 1425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 1435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.surfaceChanged(holder, format, w, h); 1445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller //mRS.contextSetSurface(w, h, holder.getSurface()); 145a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller mRenderScript.resumeRendering(); 1465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setSlotCount(mSlotCount); 1475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller createCards(mCardCount); 1485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setVisibleSlots(mVisibleSlots); 1497c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma setVisibleDetails(mVisibleDetails); 1504fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma setPrefetchCardCount(mPrefetchCardCount); 1517c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma setDrawDetailBelowCard(mDrawDetailBelowCard); 1527c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma setDrawRuler(mDrawRuler); 1535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setCallback(mCarouselCallback); 1545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setDefaultBitmap(mDefaultBitmap); 1555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setLoadingBitmap(mLoadingBitmap); 1565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setDefaultGeometry(mDefaultGeometry); 1575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setLoadingGeometry(mLoadingGeometry); 158b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller setBackgroundColor(mBackgroundColor.x, mBackgroundColor.y, mBackgroundColor.z, 159b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mBackgroundColor.w); 1609afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller setBackgroundBitmap(mBackgroundBitmap); 1617cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller setDetailLineBitmap(mDefaultLineBitmap); 1625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setStartAngle(mStartAngle); 163c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setRadius(mRadius); 164c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setCardRotation(mCardRotation); 16583d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney setCardsFaceTangent(mCardsFaceTangent); 166c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setSwaySensitivity(mSwaySensitivity); 167c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setFrictionCoefficient(mFrictionCoefficient); 168c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setDragFactor(mDragFactor); 169c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setLookAt(mEye, mAt, mUp); 170420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller setRezInCardCount(mRezInCardCount); 171420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller setFadeInDuration(mFadeInDuration); 172420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller setDetailLoadingBitmap(mDetailLoadingBitmap); 1735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 176594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * Do I want to interpret the long-press gesture? If so, long-presses will cancel the 177594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * current selection and call the appropriate callbacks. Otherwise, a long press will 178594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * not be handled any way other than as a continued drag. 179594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * 180594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * @return True if we interpret long-presses 181594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma */ 182594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma public boolean interpretLongPressEvents() { 183594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return false; 184594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 185594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 186594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma /** 1875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Loads geometry from a resource id. 1885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 1895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param resId 1905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @return the loaded mesh or null if it cannot be loaded 1915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public Mesh loadGeometry(int resId) { 1935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Resources res = mContext.getResources(); 1945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller FileA3D model = FileA3D.createFromResource(mRS, res, resId); 1955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller FileA3D.IndexEntry entry = model.getIndexEntry(0); 1965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if(entry == null || entry.getClassID() != FileA3D.ClassID.MESH) { 1975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return null; 1985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return (Mesh) entry.getObject(); 2005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 2035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Load A3D file from resource. If resId == 0, will clear geometry for this item. 2045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n 2055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param resId 2065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 2075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setGeometryForItem(int n, Mesh mesh) { 208c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 209c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setGeometry(n, mesh); 210c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 2115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2137cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 2147cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Set the number of slots around the Carousel. Basically equivalent to the poles horses 2157cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * might attach to on a real Carousel. 2167cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 2177cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the number of slots 2187cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 2195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setSlotCount(int n) { 2205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mSlotCount = n; 2215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 2225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setSlotCount(n); 2235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2267cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 2277cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the number of visible slots around the Carousel. This is primarily used as a cheap 2287cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * form of clipping. The Carousel will never show more than this many cards. 2297cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the number of visible slots 2307cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 2315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setVisibleSlots(int n) { 2325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mVisibleSlots = n; 2335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 2345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setVisibleSlots(n); 2355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2387cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 2397c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * Set the number of detail textures that can be visible at one time. 2407c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * 2417c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * @param n the number of slots 2427c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma */ 2437c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setVisibleDetails(int n) { 2447c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mVisibleDetails = n; 2457c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma if (mRenderScript != null) { 2467c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mRenderScript.setVisibleDetails(n); 2477c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2487c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2497c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 2507c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma /** 2514fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * Set the number of cards to pre-load that are outside of the visible region, as determined by 2524fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * setVisibleSlots(). This number gets added to the number of visible slots and used to 2534fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * determine when resources for cards should be loaded. This number should be small (n <= 4) 2544fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * for systems with limited texture memory or views that show more than half dozen cards in the 2554fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * view. 2564fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * 2574fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * @param n the number of cards; should be even, so the count is the same on each side 2584fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma */ 2594fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma public void setPrefetchCardCount(int n) { 2604fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mPrefetchCardCount = n; 2614fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma if (mRenderScript != null) { 2624fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mRenderScript.setPrefetchCardCount(n); 2634fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2644fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2654fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma 2664fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma /** 2677c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * Set whether to draw the detail texture above or below the card. 2687c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * 2697c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * @param below False for above, true for below. 2707c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma */ 2717c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setDrawDetailBelowCard(boolean below) { 2727c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mDrawDetailBelowCard = below; 2737c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma if (mRenderScript != null) { 2747c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mRenderScript.setDrawDetailBelowCard(below); 2757c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2767c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2777c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 2787c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma /** 2794fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * Set whether to align the detail texture center with the card center. 2804fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * If not, left edges will be aligned instead. 2814fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * 2824fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * @param centered True for center-aligned, false for left-aligned. 2834fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma */ 2844fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma public void setDetailTexturesCentered(boolean centered) { 2854fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mDetailTexturesCentered = centered; 2864fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma if (mRenderScript != null) { 2874fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mRenderScript.setDetailTexturesCentered(centered); 2884fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2894fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2904fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma 291bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma public void setDrawCardsWithBlending(boolean enabled) { 292bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma mDrawCardsWithBlending = enabled; 293bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma if (mRenderScript != null) { 294bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma mRenderScript.setDrawCardsWithBlending(enabled); 295bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma } 296bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma } 297bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma 2984fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma /** 2997c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * Set whether to draw a ruler from the card to the detail texture 3007c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * 3017c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * @param drawRuler True to draw a ruler, false to draw nothing where the ruler would go. 3027c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma */ 3037c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setDrawRuler(boolean drawRuler) { 3047c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mDrawRuler = drawRuler; 3057c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma if (mRenderScript != null) { 3067c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mRenderScript.setDrawRuler(drawRuler); 3077c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3087c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3097c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 3107c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma /** 3117cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This dictates how many cards are in the deck. If the number of cards is greater than the 3127cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * number of slots, then the Carousel goes around n / slot_count times. 3137cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3147cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Can be called again to increase or decrease the number of cards. 3157cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3167cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the number of cards to create. 3177cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void createCards(int n) { 3195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCardCount = n; 3205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 3215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.createCards(n); 3225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 325a3cb716626b477c98ba912698c765eab20f27286Jim Miller public int getCardCount() { 326a3cb716626b477c98ba912698c765eab20f27286Jim Miller return mCardCount; 327a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 328a3cb716626b477c98ba912698c765eab20f27286Jim Miller 3297cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3307cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This sets the texture on card n. It should only be called in response to 3317cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * {@link CarouselCallback#onRequestTexture(int)}. Since there's no guarantee 3327cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * that a given texture is still on the screen, replacing this texture should be done 3337cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * by first setting it to null and then waiting for the next 3347cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * {@link CarouselCallback#onRequestTexture(int)} to swap it with the new one. 3357cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3367cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the card given by {@link CarouselCallback#onRequestTexture(int)} 3377cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap the bitmap image to show 3387cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setTextureForItem(int n, Bitmap bitmap) { 340c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma // Also check against mRS, to handle the case where the result is being delivered by a 341c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma // background thread but the sender no longer exists. 342c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null && mRS != null) { 3437cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "setTextureForItem(" + n + ")"); 3449afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mRenderScript.setTexture(n, bitmap); 3457cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "done"); 3465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3497cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3507cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This sets the detail texture that floats above card n. It should only be called in response 3517cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * to {@link CarouselCallback#onRequestDetailTexture(int)}. Since there's no guarantee 3527cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * that a given texture is still on the screen, replacing this texture should be done 3537cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * by first setting it to null and then waiting for the next 3547cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * {@link CarouselCallback#onRequestDetailTexture(int)} to swap it with the new one. 3557cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 356b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param n the card to set detail texture for 357b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param offx an optional offset to apply to the texture (in pixels) from top of detail line 358b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param offy an optional offset to apply to the texture (in pixels) from top of detail line 359b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param loffx an optional offset to apply to the line (in pixels) from left edge of card 360b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param loffy an optional offset to apply to the line (in pixels) from top of screen 3617cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap the bitmap to show as the detail 3627cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 363b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public void setDetailTextureForItem(int n, float offx, float offy, float loffx, float loffy, 364b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller Bitmap bitmap) { 3657cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (mRenderScript != null) { 3667cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "setDetailTextureForItem(" + n + ")"); 367b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller mRenderScript.setDetailTexture(n, offx, offy, loffx, loffy, bitmap); 3687cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "done"); 3697cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 3707cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 3717cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 3727cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3737cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the bitmap to show on a card when the card draws the very first time. 3747cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Generally, this bitmap will only be seen during the first few frames of startup 3757cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * or when the number of cards are changed. It can be ignored in most cases, 3767cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * as the cards will generally only be in the loading or loaded state. 3777cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3787cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 3797cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setDefaultBitmap(Bitmap bitmap) { 3819afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mDefaultBitmap = bitmap; 3825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 3835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setDefaultBitmap(bitmap); 3845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3877cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3887cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the bitmap to show on the card while the texture is loading. It is set to this 3897cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * value just before {@link CarouselCallback#onRequestTexture(int)} is called and changed 3907cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * when {@link CarouselView#setTextureForItem(int, Bitmap)} is called. It is shared by all 3917cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * cards. 3927cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3937cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 3947cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLoadingBitmap(Bitmap bitmap) { 3965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mLoadingBitmap = bitmap; 3975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 3985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setLoadingBitmap(bitmap); 3995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4027cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 403b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * Sets background to specified color. If a background texture is specified with 404b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * {@link CarouselView#setBackgroundBitmap(Bitmap)}, then this call has no effect. 405b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * 406b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param red the amount of red 407b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param green the amount of green 408b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param blue the amount of blue 409b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param alpha the amount of alpha 410b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller */ 411b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller public void setBackgroundColor(float red, float green, float blue, float alpha) { 412b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mBackgroundColor = new Float4(red, green, blue, alpha); 413b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller if (mRenderScript != null) { 414b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mRenderScript.setBackgroundColor(mBackgroundColor); 415b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller } 416b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller } 417420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 418b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller /** 419b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * Can be used to optionally set the background to a bitmap. When set to something other than 420b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * null, this overrides {@link CarouselView#setBackgroundColor(Float4)}. 4217cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4227cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 4237cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4249afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller public void setBackgroundBitmap(Bitmap bitmap) { 4259afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mBackgroundBitmap = bitmap; 4269afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller if (mRenderScript != null) { 4279afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mRenderScript.setBackgroundTexture(bitmap); 4289afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller } 4299afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller } 4309afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller 4317cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 432420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * Can be used to optionally set a "loading" detail bitmap. Typically, this is just a black 433420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * texture with alpha = 0 to allow details to slowly fade in. 434420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 435420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * @param bitmap 436420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller */ 437420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public void setDetailLoadingBitmap(Bitmap bitmap) { 438420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mDetailLoadingBitmap = bitmap; 439420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller if (mRenderScript != null) { 440420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRenderScript.setDetailLoadingTexture(bitmap); 441420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 442420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 443420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 444420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller /** 4457cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This texture is used to draw a line from the card alongside the texture detail. The line 4467cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * will be as wide as the texture. It can be used to give the line glow effects as well as 4477cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * allowing other blending effects. It is typically one dimensional, e.g. 3x1. 4487cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4497cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 4507cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4517cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public void setDetailLineBitmap(Bitmap bitmap) { 4527cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mDefaultLineBitmap = bitmap; 4537cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (mRenderScript != null) { 4547cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mRenderScript.setDetailLineTexture(bitmap); 4557cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4567cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4577cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 4587cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4597cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This geometry will be shown when no geometry has been loaded for a given slot. If not set, 4607cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * a quad will be drawn in its place. It is shared for all cards. 4617cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4627cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param mesh 4637cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setDefaultGeometry(Mesh mesh) { 4655ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mDefaultGeometry = mesh; 4665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setDefaultGeometry(mesh); 4685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4717cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4727cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This is an intermediate version of the object to show while geometry is loading. If not set, 4737cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * a quad will be drawn in its place. It is shared for all cards. 4747cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4757cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param mesh 4767cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLoadingGeometry(Mesh mesh) { 4785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mLoadingGeometry = mesh; 4795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setLoadingGeometry(mesh); 4815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4847cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4857cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the callback for receiving events from RenderScript. 4867cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4877cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param callback 4887cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setCallback(CarouselCallback callback) 4905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 4915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCarouselCallback = callback; 4925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setCallback(callback); 4945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4977cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4987cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the startAngle for the Carousel. The start angle is the first position of the first 4997cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * slot draw. Cards will be drawn from this angle in a counter-clockwise manner around the 5007cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Carousel. 5017cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 5027cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param angle the angle, in radians. 5037cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 5045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setStartAngle(float angle) 5055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 5065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mStartAngle = angle; 5075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 5085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setStartAngle(angle); 5095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 5105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 511c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 512c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setRadius(float radius) { 513c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRadius = radius; 514c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 515c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setRadius(radius); 516c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 517c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 518c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 519c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setCardRotation(float cardRotation) { 520c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mCardRotation = cardRotation; 521c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 522c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setCardRotation(cardRotation); 523c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 524c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 525c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 52683d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney public void setCardsFaceTangent(boolean faceTangent) { 52783d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney mCardsFaceTangent = faceTangent; 52883d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney if (mRenderScript != null) { 52983d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney mRenderScript.setCardsFaceTangent(faceTangent); 53083d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney } 53183d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney } 53283d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney 533c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setSwaySensitivity(float swaySensitivity) { 534c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mSwaySensitivity = swaySensitivity; 535c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 536c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setSwaySensitivity(swaySensitivity); 537c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 538c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 539c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 540c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setFrictionCoefficient(float frictionCoefficient) { 541c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mFrictionCoefficient = frictionCoefficient; 542c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 543c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setFrictionCoefficient(frictionCoefficient); 544c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 545c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 546c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 547c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setDragFactor(float dragFactor) { 548c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mDragFactor = dragFactor; 549c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 550c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setDragFactor(dragFactor); 551c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 552c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 553c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 554c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setLookAt(float[] eye, float[] at, float[] up) { 555c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mEye = eye; 556c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mAt = at; 557c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mUp = up; 558c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 559c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setLookAt(eye, at, up); 560c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 561c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 5625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 563198a060d650bc849ef0f25b597888fac9546803bJack Palevich public void requestFirstCardPosition() { 564198a060d650bc849ef0f25b597888fac9546803bJack Palevich if (mRenderScript != null) { 565198a060d650bc849ef0f25b597888fac9546803bJack Palevich mRenderScript.requestFirstCardPosition(); 566198a060d650bc849ef0f25b597888fac9546803bJack Palevich } 567198a060d650bc849ef0f25b597888fac9546803bJack Palevich } 568198a060d650bc849ef0f25b597888fac9546803bJack Palevich 569420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller /** 570420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * This sets the number of cards in the distance that will be shown "rezzing in". 571420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * These alpha values will be faded in from the background to the foreground over 572420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 'n' cards. A floating point value is used to allow subtly changing the rezzing in 573420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * position. 574420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 575420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * @param n the number of cards to rez in. 576420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller */ 577420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public void setRezInCardCount(float n) { 578420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRezInCardCount = n; 579420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller if (mRenderScript != null) { 580420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRenderScript.setRezInCardCount(n); 581420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 582420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 583420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 584420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller /** 585420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * This sets the duration (in ms) that a card takes to fade in when loaded via a call 586420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * to {@link CarouselView#setTextureForItem(int, Bitmap)}. The timer starts the 587420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * moment {@link CarouselView#setTextureForItem(int, Bitmap)} is called and continues 588420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * until all of the cards have faded in. Note: using large values will extend the 589420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * animation until all cards have faded in. 590420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 591420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * @param t 592420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller */ 593420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public void setFadeInDuration(long t) { 594420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mFadeInDuration = t; 595420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller if (mRenderScript != null) { 596420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRenderScript.setFadeInDuration(t); 597420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 598420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 599420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 6005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 6015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onDetachedFromWindow() { 6025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onDetachedFromWindow(); 603c3e94dc22d3c03b514bf3aff41082bfab7aca845Jack Palevich mRenderScript = null; 604c3e94dc22d3c03b514bf3aff41082bfab7aca845Jack Palevich if (mRS != null) { 6055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRS = null; 6065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller destroyRenderScript(); 6075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 6115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onAttachedToWindow() { 6125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onAttachedToWindow(); 6135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ensureRenderScript(); 6145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 6175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public boolean onTouchEvent(MotionEvent event) { 618594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma super.onTouchEvent(event); 6195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final int action = event.getAction(); 6205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final float x = event.getX(); 6215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final float y = event.getY(); 6225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript == null) { 6245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return true; 6255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller switch (action) { 6285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case MotionEvent.ACTION_DOWN: 6295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mTracking = true; 6305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.doStart(x, y); 6315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 6325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case MotionEvent.ACTION_MOVE: 6345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mTracking) { 6355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.doMotion(x, y); 6365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 6385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case MotionEvent.ACTION_UP: 6405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.doStop(x, y); 6415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mTracking = false; 6425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 6435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return true; 6465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller} 648