闲来无事,做了一个简单的抽奖转盘的ui实现,供大家参考

package com.microchange.lucky;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.RectF;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

public class HalfCircle extends View {

private Paint paint;

private RectF oval;

private float startAngle;

private float sweepSpeed;

private float sweepAngle;

boolean useCenter;

int count;// 等份

@Override

protected void onDraw(Canvas canvas) {

setSweepAngle(count);

while (startAngle <= 360) {

if (startAngle % (count*3) == 0) {

paint.setColor(Color.BLUE);

} else if (startAngle % (count*2) == 0){

paint.setColor(Color.GREEN);

}else {

paint.setColor(Color.RED);

}

Log.e(""+startAngle, paint.getColor()+"");

canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);

startAngle += count;

}

float centerX = oval.centerX();

float centerY = oval.centerY();

paint.setColor(Color.WHITE);

// paint.setStrokeWidth(5);

// paint.setStyle(Paint.Style.STROKE); //设置空心

paint.setAntiAlias(true); //消除锯齿

canvas.drawCircle(centerX, centerY, 50, paint);

String text = "奖";

paint.setTextSize(20 * getContext().getResources().getDisplayMetrics().density);

float measureText = paint.measureText(text);

float textY = paint.descent() - paint.ascent();

paint.setColor(Color.RED);

// canvas.drawLine(0, centerY, 480, centerY, paint);

// canvas.drawText(text, centerX-(measureText/2), centerY, paint);

canvas.drawText(text, centerX-(measureText/2), centerY+(textY/4), paint);

}

private void init() {

paint = new Paint();

paint.setColor(Color.BLUE);

paint.setAntiAlias(true);

paint.setStrokeWidth(5);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return super.onTouchEvent(event);

}

/**

* @return the count

*/

public int getCount() {

return count;

}

/**

* @param count the count to set

*/

public void setCount(int count) {

this.count = 360 / count;

}

public Paint getPaint() {

return paint;

}

public void setPaint(Paint paint) {

this.paint = paint;

}

public RectF getOval() {

return oval;

}

public void setOval(RectF oval) {

this.oval = oval;

}

public float getStartAngle() {

return startAngle;

}

public void setStartAngle(float startAngle) {

this.startAngle = startAngle;

}

public float getSweepSpeed() {

return sweepSpeed;

}

public void setSweepSpeed(float sweepSpeed) {

this.sweepSpeed = sweepSpeed;

}

public float getSweepAngle() {

return sweepAngle;

}

public void setSweepAngle(float sweepAngle) {

this.sweepAngle = sweepAngle;

}

public boolean isUseCenter() {

return useCenter;

}

public void setUseCenter(boolean useCenter) {

this.useCenter = useCenter;

}

public HalfCircle(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init();

}

public HalfCircle(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public HalfCircle(Context context) {

this(context, null, 0);

}

}

package com.microchange.lucky;

import android.app.Activity;

import android.graphics.RectF;

import android.os.Bundle;

import android.view.animation.AccelerateInterpolator;

import android.view.animation.Animation;

import android.view.animation.DecelerateInterpolator;

import android.view.animation.Interpolator;

import android.view.animation.RotateAnimation;

public class MainActivity extends Activity {

RectF rect;

int radius = 300;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

HalfCircle circle = new HalfCircle(getApplicationContext());

circle.setOval(getRectF());

// circle.setStartAngle(90);

circle.setUseCenter(true);

circle.setCount(9);

Animation animation = new RotateAnimation(0, 135*10, getRectF().centerX(), getRectF().centerY());

animation.setDuration(5000);

animation.setInterpolator(new DecelerateInterpolator());

// animation.setRepeatCount(-1);

circle.setAnimation(animation );

// animation.start();

setContentView(circle);

}

public RectF getRectF(){

if (rect==null){

// getWindow().getDecorView().getWidth()

int width = getResources().getDisplayMetrics().widthPixels;

int height = getResources().getDisplayMetrics().heightPixels;

int top = (height - radius)/2;

int left = (width - radius)/2;

rect = new RectF(left, top, left+radius, top+radius);

}

return rect;

}

}

希望本文所述对大家学习Android程序设计有所帮助。

android自定义抽奖,Android简单实现圆盘抽奖界面相关推荐

  1. Axure移动端app抽奖转盘+电商圆盘抽奖+商品抽奖+年会抽奖+抽奖动态+Axure通用抽奖转盘组件原型+九宫格方形随机抽奖原型组件+运营活动抽奖转盘

    Axure移动端app抽奖转盘+电商圆盘抽奖+商品抽奖+年会抽奖+抽奖动态+Axure通用抽奖转盘组件原型+九宫格方形随机抽奖原型组件+运营活动抽奖转盘 原型演示及下载地址:https://www.p ...

  2. 球体动画Android,Android自定义View实现简单炫酷的球体进度球实例代码

    前言 最近一直在研究自定义view,正好项目中有一个根据下载进度来实现球体进度的需求,所以自己写了个进度球,代码非常简单.先看下效果: 效果还是非常不错的. 准备知识 要实现上面的效果我们只要掌握两个 ...

  3. Android自定义键盘的简单实现

    概述 突然发现好多软件都使用了自己定义的软键盘.自己就想着先把这块坑先踩踩把,以后掉坑的时候不至于帅的太惨.言归正传,对于自定义软键盘.需要用到系统提供的两个类:Keyboard和KeyboardVi ...

  4. Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)

    SubmitButton 背景 实现思路 继承View 面试题:构造方法如何选择 自定义属性 面试题:styleable.AttributeSet.TypedArray的关系 测量宽高 面试题:UNS ...

  5. Android自定义组件之简单组合

    Android自定义控件有两种,一种是组合.比如一个linearlayout 里面有textview,imageview. 这样的好处是,写一个就可以多处使用. view_image_and_butt ...

  6. android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定

    概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...

  7. android 自定义banner,Android项目 引入Banner开源库(轮播图)

    Banner开源库是什么? Banner 是 Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义. 怎么使用 Banner 开源库? 1.在项目\a ...

  8. android 自定义 child,Android自定义View

    前言 Android自定义View的详细步骤是我们每一个Android开发人员都必须掌握的技能,因为在开发中总会遇到自定义View的需求.为了提高自己的技术水平,自己就系统的去研究了一下,在这里写下一 ...

  9. android 自定义 popupwindow,Android自定义弹出窗口PopupWindow使用技巧

    PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(View contentView, int widt ...

  10. android 自定义 对号,Android自定义View实现打钩动画功能

    先上效果图 动图 静态图 1. 回顾 [Android自定义View:一个精致的打钩小动画]上一篇文章,我们已经实现了基本上实现了控件的效果了,但是...但是...过了三四天后,仔细看回自己写的代码, ...

最新文章

  1. MS 的SPACE很不好的说
  2. crontab命令的使用
  3. python中判断实例可迭代地几种方式
  4. 安卓进阶系列-03上弹选择框(PopupDialog)的使用
  5. python基础课程_2学习笔记3:图形用户界面
  6. 转:Socket编程知识必学
  7. Unity脚本运行时更新带来了什么?
  8. python怎么设置画布颜色_如何在kivy python中动态更改画布颜色?
  9. Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]
  10. java 购物系统代码_java购物系统源代码
  11. PHP读取PDF内容方法
  12. 格局打开:NFT持有者决定IP天花板
  13. matlab模拟多个平面波,Desktop matlab模拟两束平面波干涉 (1)光源非单色性的影响 联合开发网 - pudn.com...
  14. 模型评估(误差平方和(SSE The sum of squares due to error))
  15. hive经典面试题1--根据主播上播、下播时间戳求播出时长
  16. keil 不能F12跳转到定义
  17. 《上瘾:让用户养成使用习惯的四大产品逻辑》读书笔记摘录
  18. 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
  19. 昌德科技冲刺上市:计划募资约12亿元,蒋卫和为实控人
  20. python的内置函数功能[翻译]

热门文章

  1. TiFlink: 使用 TiKV 和 Flink 实现强一致的物化视图
  2. java内存模型作用是什么意思_JMM(Java内存模型)是什么?为什么使用并发?
  3. adi翻译_ADI是什么意思_ADI的翻译_音标_读音_用法_例句_爱词霸在线词典
  4. 【PMAC学习笔记——第0篇】初识PMAC运动控制卡以及 Microsoft Visual C++ 2019,PeWin32 PRO2环境搭建
  5. c语言在bmp图片上写字的函数,在bmp上写字
  6. 怎么可以修改pr基本图形中的文字_PR教程03 | 如何增加字幕
  7. 实现 ResponseBodyAdvice 定制化JSON 返回字段
  8. logback使用配置详解
  9. 如何用企业网站的访问统计数据助力线上推广 上海添力
  10. 【Android实现返回主页,禁止返回上一层等功能】