实现Launcher3的立方滚动特效

packages\apps\Launcher3\src\com\android\launcher3\PagedView.java 


@Override

    protected void dispatchDraw(Canvas canvas) {
if(this instanceof AppsCustomizePagedView){
if(getChildCount() <= 0 )return;


final long drawingTime = getDrawingTime();
   final int count = getChildCount();
       for (int i = 0; i < count; i++) {

                            drawScreenCube(canvas, i, drawingTime,4);
}
return;

}

}


 void drawScreenCube(Canvas canvas, int screen, long drawingTime ,int select) {

 final int width = getWidth(); 
System.out.println("width --- " + getWidth());
            final int scrollWidth = screen * width; 
            final int scrollX = this.getScrollX();  
            if(scrollWidth > scrollX + width || scrollWidth + width < scrollX) { 
                return; 
            } 
            final View child = getPageAt(screen); 
            final int faceIndex = screen; 
float faceDegree ;
            faceDegree =  (this.getScrollX() - faceIndex *width)*180/width/2;
       final float currentDegree = getScrollX() * (angle / getMeasuredWidth());
            if(faceDegree > 90 || faceDegree < -90) { 
                return; 
            }         
            final float centerX = (scrollWidth < scrollX)?scrollWidth + width:scrollWidth; 
            final float centerY = getHeight()/2; 
            final Camera camera = mCamera; 
            final Matrix matrix = mMatrix; 
            canvas.save(); 
            camera.save(); 
            camera.rotateY(-faceDegree); 
            camera.getMatrix(matrix); 
            camera.restore(); 
            matrix.preTranslate(-centerX, -centerY); 
            matrix.postTranslate(centerX, centerY); 
            canvas.concat(matrix); 
            drawChild(canvas, child, drawingTime);
            canvas.restore(); 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值