一个炫字都不够??!!!手把手带你打造3D自定义view

分享一则最近流行的笑话:
最新科学研究表明:寒冷可以使人保持年轻,楼下的王大爷表示虽然今年已经60多岁了,但是仍然冷的跟孙子一样。

呃。好吧,这个冬天确实有点冷,在广州活生生的把我这个原生北方人,冻成一条狗。(研究表明:寒冷可以让人类基因突变。。。。)

好了不扯了。前些日子有朋友让我写博客来分析一下这个仿MIUI的时钟,从中学到了一些炫酷效果的实现。

本项目地址:https://github.com/githubwing/compassView

那么是啥3D效果呢,先来看看效果图,额。。有好多个:
这里写图片描述
这里写图片描述
这里写图片描述

其实后两个都是png来的。。

转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50590051

那么请问,看到图形的变换,你想到了什么?
没错!就是Matrix。
关于Matrix你可以到爱哥的博客了解到及其详细的讲解(谢谢爱哥!)。

下面我们就来研究一下如何用矩阵,实现这个3d的效果。

首先新建自定义view类。


public class TDView extends View {
   
    private Paint mPaint;

    private int mCenterX;
    private int mCenterY;
     public TDView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
    }
}

然后在圆心画一个圆出来

 @Override
    protected void onDraw(Canvas canvas) {

        mCenterX = getWidth() / 2;
        mCenterY = getHeight() / 2;
        canvas.drawCircle(mCenterX,mCenterY,100,mPaint);
    }

现在是这样的:

这里写图片描述

我们知道,处理一个图片的时候(切错)可以使用矩阵来处理,同时处理X,Y的话可以使用Camera类,camera可以生成一个指定效果的矩阵。直接来看用法:

private Camera mCamera;
private Matrix mMatrix;

mMatrix = new Matrix();
mCamera = new Camera();

在onDraw里 把camera给旋转一下,并把生成的矩阵给一个矩阵。再把矩阵应用到canvas,看一下效果。

        mMatrix.reset();
        mCamera.save();
        mCamera.rotateX(10);
        mCamera.rotateY(20);
        mCamera.getMatrix(mMatrix);
        mCamera.restore();
        //将矩阵作用于整个canvas
        canvas.concat(mMatrix);
        ```
这里写图片描述 
![这里写图片描述](https://img-blog.csdn.net/20160127001011557)
呃。。。确实是变
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值