android自定义抽奖,Android简单实现圆盘抽奖界面
闲来无事,做了一个简单的抽奖转盘的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简单实现圆盘抽奖界面相关推荐
- Axure移动端app抽奖转盘+电商圆盘抽奖+商品抽奖+年会抽奖+抽奖动态+Axure通用抽奖转盘组件原型+九宫格方形随机抽奖原型组件+运营活动抽奖转盘
Axure移动端app抽奖转盘+电商圆盘抽奖+商品抽奖+年会抽奖+抽奖动态+Axure通用抽奖转盘组件原型+九宫格方形随机抽奖原型组件+运营活动抽奖转盘 原型演示及下载地址:https://www.p ...
- 球体动画Android,Android自定义View实现简单炫酷的球体进度球实例代码
前言 最近一直在研究自定义view,正好项目中有一个根据下载进度来实现球体进度的需求,所以自己写了个进度球,代码非常简单.先看下效果: 效果还是非常不错的. 准备知识 要实现上面的效果我们只要掌握两个 ...
- Android自定义键盘的简单实现
概述 突然发现好多软件都使用了自己定义的软键盘.自己就想着先把这块坑先踩踩把,以后掉坑的时候不至于帅的太惨.言归正传,对于自定义软键盘.需要用到系统提供的两个类:Keyboard和KeyboardVi ...
- Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)
SubmitButton 背景 实现思路 继承View 面试题:构造方法如何选择 自定义属性 面试题:styleable.AttributeSet.TypedArray的关系 测量宽高 面试题:UNS ...
- Android自定义组件之简单组合
Android自定义控件有两种,一种是组合.比如一个linearlayout 里面有textview,imageview. 这样的好处是,写一个就可以多处使用. view_image_and_butt ...
- android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定
概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...
- android 自定义banner,Android项目 引入Banner开源库(轮播图)
Banner开源库是什么? Banner 是 Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义. 怎么使用 Banner 开源库? 1.在项目\a ...
- android 自定义 child,Android自定义View
前言 Android自定义View的详细步骤是我们每一个Android开发人员都必须掌握的技能,因为在开发中总会遇到自定义View的需求.为了提高自己的技术水平,自己就系统的去研究了一下,在这里写下一 ...
- android 自定义 popupwindow,Android自定义弹出窗口PopupWindow使用技巧
PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(View contentView, int widt ...
- android 自定义 对号,Android自定义View实现打钩动画功能
先上效果图 动图 静态图 1. 回顾 [Android自定义View:一个精致的打钩小动画]上一篇文章,我们已经实现了基本上实现了控件的效果了,但是...但是...过了三四天后,仔细看回自己写的代码, ...
最新文章
- MS 的SPACE很不好的说
- crontab命令的使用
- python中判断实例可迭代地几种方式
- 安卓进阶系列-03上弹选择框(PopupDialog)的使用
- python基础课程_2学习笔记3:图形用户界面
- 转:Socket编程知识必学
- Unity脚本运行时更新带来了什么?
- python怎么设置画布颜色_如何在kivy python中动态更改画布颜色?
- Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]
- java 购物系统代码_java购物系统源代码
- PHP读取PDF内容方法
- 格局打开:NFT持有者决定IP天花板
- matlab模拟多个平面波,Desktop matlab模拟两束平面波干涉
(1)光源非单色性的影响 联合开发网 - pudn.com...
- 模型评估(误差平方和(SSE The sum of squares due to error))
- hive经典面试题1--根据主播上播、下播时间戳求播出时长
- keil 不能F12跳转到定义
- 《上瘾:让用户养成使用习惯的四大产品逻辑》读书笔记摘录
- 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
- 昌德科技冲刺上市:计划募资约12亿元,蒋卫和为实控人
- python的内置函数功能[翻译]
热门文章
- TiFlink: 使用 TiKV 和 Flink 实现强一致的物化视图
- java内存模型作用是什么意思_JMM(Java内存模型)是什么?为什么使用并发?
- adi翻译_ADI是什么意思_ADI的翻译_音标_读音_用法_例句_爱词霸在线词典
- 【PMAC学习笔记——第0篇】初识PMAC运动控制卡以及 Microsoft Visual C++ 2019,PeWin32 PRO2环境搭建
- c语言在bmp图片上写字的函数,在bmp上写字
- 怎么可以修改pr基本图形中的文字_PR教程03 | 如何增加字幕
- 实现 ResponseBodyAdvice 定制化JSON 返回字段
- logback使用配置详解
- 如何用企业网站的访问统计数据助力线上推广 上海添力
- 【Android实现返回主页,禁止返回上一层等功能】