Android 真正的3D Gallery


主要实现的类:

package com.ws.wsvod.opengl;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import com.ws.wsvod.converflow.BitmapCanvas;
import com.ws.wsvod.converflow.DataCache;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.animation.AnimationUtils;

public class CoverFlowOpenGL extends GLSurfaceView
        implements GLSurfaceView.Renderer {
    private static final String TAG = "AnotherCoverFlow";
    private static final int TOUCH_MINIMUM_MOVE = 5;
    private static final int IMAGE_SIZE = 128; // the bitmap size we use for the texture
    private static final int MAX_TILES = 48; // the maximum tiles in the cache
    private static final int VISIBLE_TILES = 3; // the visble tiles left and right

    private static final float SCALE = 0.5f; // the scale of surface view
    private static final float SPREAD_IMAGE = 0.24f;
    private static final float FLANK_SPREAD = 0.20f;
    private static final float FRICTION = 10.0f;
    private static final float MAX_SPEED = 6.0f;

    private static final float[] GVertices = new float[]{
            -1.0f, -1.0f, 0.0f,
            1.0f, -1.0f, 0.0f,
            -1.0f, 1.0f, 0.0f,
            1.0f, 1.0f, 0.0f,
    };

    private static final float[] GTextures = new float[]{
            0.0f, 1.0f,
            1.0f, 1.0f,
            0.0f, 0.0f,
            1.0f, 0.0f,
    };

    private GL10 mGLContext;
    private FloatBuffer mVerticesBuffer;
    private FloatBuffer mTexturesBuffer;
    private float[] mMatrix;

    private int mBgTexture;
    private FloatBuffer mBgVerticesBuffer;
    private FloatBuffer mBgTexturesBuffer;
    private int mBgBitmapId;
    private boolean mInitBackground;

    private float mOffset;
    private int mLastOffset;
    private RectF mTouchRect;

    private int mWidth;
    private int mHeight;
    private boolean mTouchMoved;
    private float mTouchStartPos;
    private float mTouchStartX;
    private float mTouchStartY;

    private float mStartOffset;
    private long mStartTime;

    private float mStartSpeed;
    private float mDuration;
    private Runnable mAnimationRunnable;
    private VelocityTracker mVelocity;

    private boolean mStopBackgroundThread;
    private CoverFlowListener mListener;
    private DataCache<Integer, CoverFlowRecord> mCache;

    public CoverFlowOpenGL(Context context) {
        super(context);

        setEGLConfigChooser(8, 8, 8, 8, 16, 0);

        setRenderer(this);
//        setRenderMode(RENDERMODE_WHEN_DIRTY);

        getHolder().setFormat(PixelFormat.TRANSLUCENT);
//        setZOrderMediaOverlay(true);
//        setZOrderOnTop(true);

        mCache = new DataCache<Integer, CoverFlowRecord>(MAX_TILES);
        mLastOffset = 0;
        mOffset = 0;
        mInitBackground = false;
        mBgBitmapId = 0;
    }

    public void setCoverFlowListener(CoverFlowListener listener) {
        mListener = listener;
    }

    private float checkValid(float off) {
        int max = mListener.getCount(this) - 1;
        if (off < 0)
            return 0;
        else if (off > max)
            return max;

        return off;
    }

    pub
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值