CarouselView.java revision a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3
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; 79a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich private float mCarouselRotationAngle; 80c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mRadius = DEFAULT_RADIUS; 81c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mCardRotation = 0.0f; 8283d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney private boolean mCardsFaceTangent = false; 83c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mSwaySensitivity = DEFAULT_SWAY_SENSITIVITY; 84c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mFrictionCoefficient = DEFAULT_FRICTION_COEFFICIENT; 85c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mDragFactor = DEFAULT_DRAG_FACTOR; 865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private int mSlotCount = DEFAULT_SLOT_COUNT; 87c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mEye[] = { 20.6829f, 2.77081f, 16.7314f }; 88c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mAt[] = { 14.7255f, -3.40001f, -1.30184f }; 89c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma private float mUp[] = { 0.0f, 1.0f, 0.0f }; 906b1fa13e79a6ae467d16da223fd36db53fa5a5cbJim Miller private Float4 mBackgroundColor = new Float4(0.0f, 0.0f, 0.0f, 1.0f); 91a3cb716626b477c98ba912698c765eab20f27286Jim Miller private CarouselCallback mCarouselCallback; 92420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private float mRezInCardCount = 0.0f; 93420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private long mFadeInDuration = 250L; 94420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private Bitmap mDetailLoadingBitmap = Bitmap.createBitmap( 95420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller new int[] {0}, 0, 1, 1, 1, Bitmap.Config.ARGB_4444); 965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static class Info { 989afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller public Info(int _resId) { resId = _resId; } 995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public int resId; // resource for renderscript resource (e.g. R.raw.carousel) 1005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public abstract Info getRenderScriptInfo(); 1035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public CarouselView(Context context) { 1055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller this(context, null); 1065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 1095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Constructor used when this widget is created from a layout file. 1105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public CarouselView(Context context, AttributeSet attrs) { 1125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super(context, attrs); 1135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mContext = context; 1145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller boolean useDepthBuffer = true; 115e386bbba584685f6261e6dc846c9d05c79b53535Bryan Mawhinney ensureRenderScript(); 1165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // TODO: add parameters to layout 117594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 118594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma setOnLongClickListener(new OnLongClickListener() { 119594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma public boolean onLongClick(View v) { 120594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma if (interpretLongPressEvents()) { 121594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma mRenderScript.doLongPress(); 122594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return true; 123594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } else { 124594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return false; 125594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 126594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 127594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma }); 1285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void ensureRenderScript() { 131e386bbba584685f6261e6dc846c9d05c79b53535Bryan Mawhinney if (mRS == null) { 132fc1960b04f7746f8bdb13cc5bf3297fe0928c851Jason Sams RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); 133fc1960b04f7746f8bdb13cc5bf3297fe0928c851Jason Sams sc.setDepth(16, 24); 134fc1960b04f7746f8bdb13cc5bf3297fe0928c851Jason Sams mRS = createRenderScript(sc); 135e386bbba584685f6261e6dc846c9d05c79b53535Bryan Mawhinney } 136a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller if (mRenderScript == null) { 137a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller mRenderScript = new CarouselRS(mRS, getResources(), getRenderScriptInfo().resId); 138a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller mRenderScript.resumeRendering(); 139a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller } 1405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 1435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 1445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.surfaceChanged(holder, format, w, h); 1455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller //mRS.contextSetSurface(w, h, holder.getSurface()); 146a044fbbb1e5498a0112f20a1b0de11a4089ef612Jim Miller mRenderScript.resumeRendering(); 1475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setSlotCount(mSlotCount); 1485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller createCards(mCardCount); 1495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setVisibleSlots(mVisibleSlots); 1507c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma setVisibleDetails(mVisibleDetails); 1514fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma setPrefetchCardCount(mPrefetchCardCount); 1527c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma setDrawDetailBelowCard(mDrawDetailBelowCard); 1537c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma setDrawRuler(mDrawRuler); 1545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setCallback(mCarouselCallback); 1555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setDefaultBitmap(mDefaultBitmap); 1565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setLoadingBitmap(mLoadingBitmap); 1575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setDefaultGeometry(mDefaultGeometry); 1585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setLoadingGeometry(mLoadingGeometry); 159b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller setBackgroundColor(mBackgroundColor.x, mBackgroundColor.y, mBackgroundColor.z, 160b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mBackgroundColor.w); 1619afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller setBackgroundBitmap(mBackgroundBitmap); 1627cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller setDetailLineBitmap(mDefaultLineBitmap); 1635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setStartAngle(mStartAngle); 164a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich setCarouselRotationAngle(mCarouselRotationAngle); 165c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setRadius(mRadius); 166c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setCardRotation(mCardRotation); 16783d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney setCardsFaceTangent(mCardsFaceTangent); 168c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setSwaySensitivity(mSwaySensitivity); 169c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setFrictionCoefficient(mFrictionCoefficient); 170c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setDragFactor(mDragFactor); 171c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma setLookAt(mEye, mAt, mUp); 172420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller setRezInCardCount(mRezInCardCount); 173420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller setFadeInDuration(mFadeInDuration); 174420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller setDetailLoadingBitmap(mDetailLoadingBitmap); 17550c5e37bb3a952d1da78582d00922a28c55c0239Jack Palevich setDrawCardsWithBlending(mDrawCardsWithBlending); 1765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 179594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * Do I want to interpret the long-press gesture? If so, long-presses will cancel the 180594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * current selection and call the appropriate callbacks. Otherwise, a long press will 181594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * not be handled any way other than as a continued drag. 182594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * 183594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma * @return True if we interpret long-presses 184594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma */ 185594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma public boolean interpretLongPressEvents() { 186594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma return false; 187594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 188594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 189594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma /** 1905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Loads geometry from a resource id. 1915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 1925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param resId 1935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @return the loaded mesh or null if it cannot be loaded 1945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public Mesh loadGeometry(int resId) { 1965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Resources res = mContext.getResources(); 1975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller FileA3D model = FileA3D.createFromResource(mRS, res, resId); 1985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller FileA3D.IndexEntry entry = model.getIndexEntry(0); 1995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if(entry == null || entry.getClassID() != FileA3D.ClassID.MESH) { 2005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return null; 2015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return (Mesh) entry.getObject(); 2035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 2065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Load A3D file from resource. If resId == 0, will clear geometry for this item. 2075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n 2085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param resId 2095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 2105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setGeometryForItem(int n, Mesh mesh) { 211c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 212c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setGeometry(n, mesh); 213c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 2145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2167cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 2177cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Set the number of slots around the Carousel. Basically equivalent to the poles horses 2187cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * might attach to on a real Carousel. 2197cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 2207cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the number of slots 2217cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 2225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setSlotCount(int n) { 2235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mSlotCount = n; 2245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 2255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setSlotCount(n); 2265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2297cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 2307cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the number of visible slots around the Carousel. This is primarily used as a cheap 2317cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * form of clipping. The Carousel will never show more than this many cards. 2327cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the number of visible slots 2337cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 2345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setVisibleSlots(int n) { 2355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mVisibleSlots = n; 2365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 2375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setVisibleSlots(n); 2385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2417cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 2427c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * Set the number of detail textures that can be visible at one time. 2437c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * 2447c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * @param n the number of slots 2457c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma */ 2467c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setVisibleDetails(int n) { 2477c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mVisibleDetails = n; 2487c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma if (mRenderScript != null) { 2497c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mRenderScript.setVisibleDetails(n); 2507c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2517c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2527c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 2537c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma /** 2544fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * Set the number of cards to pre-load that are outside of the visible region, as determined by 2554fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * setVisibleSlots(). This number gets added to the number of visible slots and used to 2564fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * determine when resources for cards should be loaded. This number should be small (n <= 4) 2574fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * for systems with limited texture memory or views that show more than half dozen cards in the 2584fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * view. 2594fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * 2604fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * @param n the number of cards; should be even, so the count is the same on each side 2614fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma */ 2624fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma public void setPrefetchCardCount(int n) { 2634fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mPrefetchCardCount = n; 2644fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma if (mRenderScript != null) { 2654fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mRenderScript.setPrefetchCardCount(n); 2664fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2674fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2684fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma 2694fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma /** 2707c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * Set whether to draw the detail texture above or below the card. 2717c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * 2727c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * @param below False for above, true for below. 2737c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma */ 2747c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setDrawDetailBelowCard(boolean below) { 2757c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mDrawDetailBelowCard = below; 2767c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma if (mRenderScript != null) { 2777c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mRenderScript.setDrawDetailBelowCard(below); 2787c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2797c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 2807c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 2817c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma /** 2824fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * Set whether to align the detail texture center with the card center. 2834fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * If not, left edges will be aligned instead. 2844fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * 2854fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma * @param centered True for center-aligned, false for left-aligned. 2864fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma */ 2874fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma public void setDetailTexturesCentered(boolean centered) { 2884fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mDetailTexturesCentered = centered; 2894fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma if (mRenderScript != null) { 2904fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma mRenderScript.setDetailTexturesCentered(centered); 2914fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2924fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma } 2934fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma 294bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma public void setDrawCardsWithBlending(boolean enabled) { 295bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma mDrawCardsWithBlending = enabled; 296bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma if (mRenderScript != null) { 297bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma mRenderScript.setDrawCardsWithBlending(enabled); 298bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma } 299bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma } 300bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma 3014fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma /** 3027c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * Set whether to draw a ruler from the card to the detail texture 3037c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * 3047c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma * @param drawRuler True to draw a ruler, false to draw nothing where the ruler would go. 3057c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma */ 3067c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setDrawRuler(boolean drawRuler) { 3077c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mDrawRuler = drawRuler; 3087c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma if (mRenderScript != null) { 3097c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mRenderScript.setDrawRuler(drawRuler); 3107c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3117c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3127c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 3137c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma /** 3147cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This dictates how many cards are in the deck. If the number of cards is greater than the 3157cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * number of slots, then the Carousel goes around n / slot_count times. 3167cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3177cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Can be called again to increase or decrease the number of cards. 3187cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3197cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the number of cards to create. 3207cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void createCards(int n) { 3225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCardCount = n; 3235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 3245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.createCards(n); 3255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 328a3cb716626b477c98ba912698c765eab20f27286Jim Miller public int getCardCount() { 329a3cb716626b477c98ba912698c765eab20f27286Jim Miller return mCardCount; 330a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 331a3cb716626b477c98ba912698c765eab20f27286Jim Miller 3327cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3337cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This sets the texture on card n. It should only be called in response to 3347cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * {@link CarouselCallback#onRequestTexture(int)}. Since there's no guarantee 3357cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * that a given texture is still on the screen, replacing this texture should be done 3367cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * by first setting it to null and then waiting for the next 3377cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * {@link CarouselCallback#onRequestTexture(int)} to swap it with the new one. 3387cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3397cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the card given by {@link CarouselCallback#onRequestTexture(int)} 3407cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap the bitmap image to show 3417cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setTextureForItem(int n, Bitmap bitmap) { 343c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma // Also check against mRS, to handle the case where the result is being delivered by a 344c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma // background thread but the sender no longer exists. 345c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null && mRS != null) { 3467cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "setTextureForItem(" + n + ")"); 3479afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mRenderScript.setTexture(n, bitmap); 3487cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "done"); 3495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3527cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3537cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This sets the detail texture that floats above card n. It should only be called in response 3547cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * to {@link CarouselCallback#onRequestDetailTexture(int)}. Since there's no guarantee 3557cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * that a given texture is still on the screen, replacing this texture should be done 3567cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * by first setting it to null and then waiting for the next 3577cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * {@link CarouselCallback#onRequestDetailTexture(int)} to swap it with the new one. 3587cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 359b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param n the card to set detail texture for 360b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param offx an optional offset to apply to the texture (in pixels) from top of detail line 361b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param offy an optional offset to apply to the texture (in pixels) from top of detail line 362b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param loffx an optional offset to apply to the line (in pixels) from left edge of card 363b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller * @param loffy an optional offset to apply to the line (in pixels) from top of screen 3647cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap the bitmap to show as the detail 3657cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 366b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public void setDetailTextureForItem(int n, float offx, float offy, float loffx, float loffy, 367b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller Bitmap bitmap) { 3687ec486bf1373232a35efa96622f31ac1aff5456bBryan Mawhinney if (mRenderScript != null && mRS != null) { 3697cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "setDetailTextureForItem(" + n + ")"); 370b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller mRenderScript.setDetailTexture(n, offx, offy, loffx, loffy, bitmap); 3717cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "done"); 3727cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 3737cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 3747cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 3757cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3767cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the bitmap to show on a card when the card draws the very first time. 3777cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Generally, this bitmap will only be seen during the first few frames of startup 3787cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * or when the number of cards are changed. It can be ignored in most cases, 3797cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * as the cards will generally only be in the loading or loaded state. 3807cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3817cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 3827cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setDefaultBitmap(Bitmap bitmap) { 3849afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mDefaultBitmap = bitmap; 3855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 3865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setDefaultBitmap(bitmap); 3875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3907cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 3917cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the bitmap to show on the card while the texture is loading. It is set to this 3927cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * value just before {@link CarouselCallback#onRequestTexture(int)} is called and changed 3937cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * when {@link CarouselView#setTextureForItem(int, Bitmap)} is called. It is shared by all 3947cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * cards. 3957cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 3967cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 3977cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 3985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLoadingBitmap(Bitmap bitmap) { 3995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mLoadingBitmap = bitmap; 4005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setLoadingBitmap(bitmap); 4025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4057cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 406b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * Sets background to specified color. If a background texture is specified with 407b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * {@link CarouselView#setBackgroundBitmap(Bitmap)}, then this call has no effect. 408b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * 409b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param red the amount of red 410b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param green the amount of green 411b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param blue the amount of blue 412b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * @param alpha the amount of alpha 413b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller */ 414b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller public void setBackgroundColor(float red, float green, float blue, float alpha) { 415b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mBackgroundColor = new Float4(red, green, blue, alpha); 416b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller if (mRenderScript != null) { 417b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mRenderScript.setBackgroundColor(mBackgroundColor); 418b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller } 419b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller } 420420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 421b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller /** 422b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * Can be used to optionally set the background to a bitmap. When set to something other than 423b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller * null, this overrides {@link CarouselView#setBackgroundColor(Float4)}. 4247cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4257cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 4267cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4279afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller public void setBackgroundBitmap(Bitmap bitmap) { 4289afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mBackgroundBitmap = bitmap; 4299afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller if (mRenderScript != null) { 4309afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mRenderScript.setBackgroundTexture(bitmap); 4319afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller } 4329afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller } 4339afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller 4347cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 435420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * Can be used to optionally set a "loading" detail bitmap. Typically, this is just a black 436420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * texture with alpha = 0 to allow details to slowly fade in. 437420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 438420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * @param bitmap 439420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller */ 440420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public void setDetailLoadingBitmap(Bitmap bitmap) { 441420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mDetailLoadingBitmap = bitmap; 442420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller if (mRenderScript != null) { 443420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRenderScript.setDetailLoadingTexture(bitmap); 444420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 445420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 446420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 447420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller /** 4487cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This texture is used to draw a line from the card alongside the texture detail. The line 4497cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * will be as wide as the texture. It can be used to give the line glow effects as well as 4507cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * allowing other blending effects. It is typically one dimensional, e.g. 3x1. 4517cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4527cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param bitmap 4537cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4547cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public void setDetailLineBitmap(Bitmap bitmap) { 4557cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mDefaultLineBitmap = bitmap; 4567cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (mRenderScript != null) { 4577cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mRenderScript.setDetailLineTexture(bitmap); 4587cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4597cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4607cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 4617cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4627cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This geometry will be shown when no geometry has been loaded for a given slot. If not set, 4637cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * a quad will be drawn in its place. It is shared for all cards. 4647cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4657cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param mesh 4667cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setDefaultGeometry(Mesh mesh) { 4685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mDefaultGeometry = mesh; 4695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setDefaultGeometry(mesh); 4715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4747cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4757cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This is an intermediate version of the object to show while geometry is loading. If not set, 4767cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * a quad will be drawn in its place. It is shared for all cards. 4777cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4787cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param mesh 4797cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLoadingGeometry(Mesh mesh) { 4815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mLoadingGeometry = mesh; 4825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setLoadingGeometry(mesh); 4845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4877cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 4887cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the callback for receiving events from RenderScript. 4897cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 4907cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param callback 4917cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 4925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setCallback(CarouselCallback callback) 4935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 4945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCarouselCallback = callback; 4955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 4965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setCallback(callback); 4975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 5007cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 5017cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Sets the startAngle for the Carousel. The start angle is the first position of the first 5027cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * slot draw. Cards will be drawn from this angle in a counter-clockwise manner around the 5037cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Carousel. 5047cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 5057cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param angle the angle, in radians. 5067cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 5075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setStartAngle(float angle) 5085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 5095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mStartAngle = angle; 5105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript != null) { 5115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.setStartAngle(angle); 5125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 5135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 514c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 515a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich /** 516a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * Set the current carousel rotation angle, in card units. 517a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * This is measured in card positions, not in radians or degrees. 518a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * 519a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * A value of 0.0 means that card 0 is in the home position. 520a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * A value of 1.0 means that card 1 is in the home position, and so on. 521a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * The maximum value will be somewhat less than the total number of cards. 522a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * 523a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich * @param angle 524a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich */ 525a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich public void setCarouselRotationAngle(float angle) { 526a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich mCarouselRotationAngle = angle; 527a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich if (mRenderScript != null) { 528a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich mRenderScript.setCarouselRotationAngle(angle); 529a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich } 530a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich } 531a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich 532c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setRadius(float radius) { 533c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRadius = radius; 534c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 535c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setRadius(radius); 536c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 537c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 538c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 539c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setCardRotation(float cardRotation) { 540c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mCardRotation = cardRotation; 541c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 542c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setCardRotation(cardRotation); 543c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 544c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 545c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 54683d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney public void setCardsFaceTangent(boolean faceTangent) { 54783d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney mCardsFaceTangent = faceTangent; 54883d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney if (mRenderScript != null) { 54983d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney mRenderScript.setCardsFaceTangent(faceTangent); 55083d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney } 55183d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney } 55283d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney 553c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setSwaySensitivity(float swaySensitivity) { 554c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mSwaySensitivity = swaySensitivity; 555c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 556c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setSwaySensitivity(swaySensitivity); 557c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 558c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 559c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 560c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setFrictionCoefficient(float frictionCoefficient) { 561c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mFrictionCoefficient = frictionCoefficient; 562c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 563c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setFrictionCoefficient(frictionCoefficient); 564c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 565c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 566c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 567c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setDragFactor(float dragFactor) { 568c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mDragFactor = dragFactor; 569c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 570c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setDragFactor(dragFactor); 571c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 572c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 573c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 574c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setLookAt(float[] eye, float[] at, float[] up) { 575c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mEye = eye; 576c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mAt = at; 577c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mUp = up; 578c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma if (mRenderScript != null) { 579c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mRenderScript.setLookAt(eye, at, up); 580c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 581c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 5825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 583420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller /** 584420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * This sets the number of cards in the distance that will be shown "rezzing in". 585420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * These alpha values will be faded in from the background to the foreground over 586420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 'n' cards. A floating point value is used to allow subtly changing the rezzing in 587420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * position. 588420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 589420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * @param n the number of cards to rez in. 590420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller */ 591420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public void setRezInCardCount(float n) { 592420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRezInCardCount = n; 593420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller if (mRenderScript != null) { 594420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRenderScript.setRezInCardCount(n); 595420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 596420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 597420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 598420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller /** 599420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * This sets the duration (in ms) that a card takes to fade in when loaded via a call 600420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * to {@link CarouselView#setTextureForItem(int, Bitmap)}. The timer starts the 601420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * moment {@link CarouselView#setTextureForItem(int, Bitmap)} is called and continues 602420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * until all of the cards have faded in. Note: using large values will extend the 603420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * animation until all cards have faded in. 604420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * 605420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller * @param t 606420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller */ 607420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public void setFadeInDuration(long t) { 608420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mFadeInDuration = t; 609420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller if (mRenderScript != null) { 610420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mRenderScript.setFadeInDuration(t); 611420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 612420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 613420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 6145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 6155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onDetachedFromWindow() { 6165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onDetachedFromWindow(); 617c3e94dc22d3c03b514bf3aff41082bfab7aca845Jack Palevich mRenderScript = null; 618c3e94dc22d3c03b514bf3aff41082bfab7aca845Jack Palevich if (mRS != null) { 6195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRS = null; 6205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller destroyRenderScript(); 6215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 6255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onAttachedToWindow() { 6265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onAttachedToWindow(); 6275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ensureRenderScript(); 6285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 6315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public boolean onTouchEvent(MotionEvent event) { 632594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma super.onTouchEvent(event); 6335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final int action = event.getAction(); 6345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final float x = event.getX(); 6355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final float y = event.getY(); 6365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mRenderScript == null) { 6385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return true; 6395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller switch (action) { 6425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case MotionEvent.ACTION_DOWN: 6435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mTracking = true; 6445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.doStart(x, y); 6455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 6465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case MotionEvent.ACTION_MOVE: 6485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mTracking) { 6495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.doMotion(x, y); 6505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 6525ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case MotionEvent.ACTION_UP: 6545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRenderScript.doStop(x, y); 6555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mTracking = false; 6565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 6575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 6595ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return true; 6605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 6615ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller} 662