Android自定义SurfaceView实现抽奖转盘实例源代码
2016-06-17 13:32:26  By: shinyuu

分享一款自定义Surfaceview实现幸运大抽奖的Demo、界面比较简单、代码也不复杂、可以根据自己项目的需求修改界面、下面是Demo的截图

android实现抽奖转盘


绘制盘块图片代码

private void drawIcon(float tmpAngle, Bitmap bitmap) {
    //设置图片的宽度为直径的1/8
    int imgWidth = mRadius/8;
    
    float angle = (float) ((tmpAngle 360/itemCount/2)*Math.PI/180);
    
    int x = (int) (mCenter mRadius/2/2*Math.cos(angle));
    int y = (int) (mCenter mRadius/2/2*Math.sin(angle));
    
    //确定那个图片的位置
    Rect rect = new Rect(x-imgWidth/2, y-imgWidth/2, x imgWidth/2, y imgWidth/2);
    
    canvas.drawBitmap(bitmap, null, rect,null);
}


绘制文本代码

private void drawText(float tmpAngle, float sweepAngle, String string) {
    Path path = new Path();
    path.addArc(mRange, tmpAngle, sweepAngle);
    
    // 利用水平偏移量让文字居中
    float textWidth =  mTextPanit.measureText(string);
    int hOffset = (int) (mRadius*Math.PI/itemCount/2 - textWidth/2);
    
    //垂直偏移量
    int vOffset = mRadius/2/6;
    
    canvas.drawTextOnPath(string, path, hOffset, vOffset, mTextPanit);
}


点击启动旋转
public void luckyStart(int index){
    //计算每一项的角度
    float angle = 360/itemCount;
    
    //计算每一项中奖范围(当前index)
    //1-->150~210
    //0-->210~270
    float from = 270-(index
             1)*angle;
    float end = from angle;
    
    //设置停下来需要旋转的距离
    float targetFrom = 4*360   from;
    float targetEnd = 4*360   end;
    
    float v1= (float) ((-1 Math.sqrt(1 8*targetFrom))/2);
    float v2= (float) ((-1 Math.sqrt(1 8*targetEnd))/2);
    
    mSpeed = v1 Math.random()*(v2-v1);
    isShouldEnd = false;
}


android抽奖转盘源代码下载链接: android抽奖转盘代码 密码: khwt

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+