Android Viewpager3D广告轮播

Android Viewpager3D广告轮播

MainActivity

public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

Image3DView

package com.example.viewpage_3d;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Camera;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.widget.ImageView;
public class Image3DView extends ImageView {  
    /** 
     * 旋转角度的基准值 
     */  
    private static final float BASE_DEGREE = 50f;  
    /** 
     * 旋转深度的基准值 
     */  
    private static final float BASE_DEEP = 150f;  
    private Camera mCamera;  
    private Matrix mMaxtrix;  
    private Bitmap mBitmap;  
    /** 
     * 当前图片对应的下标 
     */  
    private int mIndex;  
    /** 
     * 在前图片在X轴方向滚动的距离 
     */  
    private int mScrollX;  
    /** 
     * Image3DSwitchView控件的宽度 
     */  
    private int mLayoutWidth;  
    /** 
     * 当前图片的宽度 
     */  
    private int mWidth;  
    /** 
     * 当前旋转的角度 
     */  
    private float mRotateDegree;  
    /** 
     * 旋转的中心点 
     */  
    private float mDx;  
    /** 
     * 旋转的深度 
     */  
    private float mDeep;  
  
    public Image3DView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        mCamera = new Camera();  
        mMaxtrix = new Matrix();  
    }  
  
    /** 
     * 初始化Image3DView所需要的信息,包括图片宽度,截取背景图等。 
     */  
    public void initImageViewBitmap() {  
        if (mBitmap == null) {  
            setDrawingCacheEnabled(true);  
            buildDrawingCache();  
            mBitmap = getDrawingCache();  
        }  
        mLayoutWidth = Image3DSwitchView.mWidth;  
        mWidth = getWidth() + Image3DSwitchView.IMAGE_PADDING * 2;  
    }  
  
    /** 
     * 设置旋转角度。 
     *  
     * @param index 
     *            当前图片的下标 
     * @param scrollX 
     *            当前图片在X轴方向滚动的距离 
     */  
    public void setRotateData(int index, int scrollX) {  
        mIndex = index;  
        mScrollX = scrollX;  
    }  
  
    /** 
     * 回收当前的Bitmap对象,以释放内存。 
     */  
    public void recycleBitmap() {  
        if (mBitmap != null && !mBitmap.isRecycled()) {  
            mBitmap.recycle();  
        }  
    }  
  
    @Override  
    public void setImageResource(int resId) {  
        super.setImageResource(resId);  
        mBitmap = null;  
        initImageViewBitmap();  
    }  
  
    @Override  
    public void setImageBitmap(Bitmap bm) {  
        super.setImageBitmap(bm);  
        mBitmap = null;  
        initImageViewBitmap();  
    }  
  
    @Override  
    public void setImageDrawable(Drawable drawable) {  
        super.setImageDrawable(drawable);  
        mBitmap = null;  
        initImageViewBitmap();  
    }  
  
    @Override  
    public void setImageURI(Uri uri) {  
        super.setImageURI(uri);  
        mBitmap = null;  
        initImageViewBitmap();  
    }  
  
    @Override  
    protected void onDraw(Canvas canvas) {  
        if (mBitmap == null) {  
            // 如果Bitmap对象还不存在,先使用父类的onDraw方法进行绘制  
            super.onDraw(canvas);  
        } else {  
            if (isImageVisible()) {  
                // 绘图时需要注意,只有当图片可见的时候才进行绘制,这样可以节省运算效率  
                computeRotateData();  
                mCamera.save();  
                mCamera.translate(0.0f, 0.0f, mDeep);  
                mCamera.rotateY(mRotateDegree);  
                mCamera.getMatrix(mMaxtrix);  
                mCamera.restore();  
                mMaxtrix.preTranslate(-mDx, -getHeight() / 2);  
                mMaxtrix.postTranslate(mDx, getHeight() / 2);  
                canvas.drawBitmap(mBitmap, mMaxtrix, null);  
            }  
        }  
    }  
  
    /** 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值