导航:首页 > 操作系统 > android抽奖转盘源码

android抽奖转盘源码

发布时间:2022-11-14 21:18:52

A. 微信小程序,通过摇一摇实现大转盘抽奖的效果代码怎么写

  1. 建议你还是不要自己写,可以通过直接用插件实现。

  2. 自己写会存在很多问题,会出现bug的

B. 我想做一个Flash,内容是一个抽奖转盘,有奖品描述,点击转盘中间的“开始”,转盘会转然后停在固定

1、制作一个影片剪辑元件:这个元件是由一个圆盘和指针组成,圆盘写你想放的奖品,指针用来旋转,比如350帧时指针旋转三圈半停止在指定位置(注意指针的旋转速度要有变化),同时在350或者351帧添加文本“恭喜您抽中与我做一辈子朋友“;
2、在影片剪辑的第一帧和最后一帧添加停止语句;
3、把影片剪辑拖到场景,放在合适位置;
4、在场景中添加按钮,同时添加播放语句。

C. surfaceview的一般写法android实现抽奖转盘的环境怎么搭建

SurfaceView是View的继承结构中一个比较特殊的子类,它的作用是提供一个第二线程来完成图形的绘制。因此应用程序不需要等待View的图形绘制,第二线程会异步完成图形的绘制。
SurfaceView实现的步骤:

继续SurfaceView并实现SurfaceHolder.Callback接口,该接口提供了SurfaceView创建、属性发生变化、销毁的时间点,那么你可以在适当的时间点完成具体的工作。
在SurfaceView初始化的时候调用SurfaceView.getHolder()方法获取一个SurfaceHolder,SurfaceHolder用于管理SurfaceView的工作过程。为了让SurfaceHolder起作用,必须为SurfaceHolder添加回调方法(即第一步实现的SurfaceHolder.Callback):
[java] view plainprint?

SurfaceHolder.addCallBack(SurfaceHolder.Callback);
在SurfaceView内创建第二线程的内部类(暂命名为SecondThread),它的主要任务是完成Canvas的图形绘制。为了能让SecondThread获得Canvas实例,必须给SecondThread传递在步骤二中获得的SurfaceHolder。现在就可以通过SurfaceHolder.lockCanvas()方法得到Canvas实例,并在Canvas上绘制图形。当图形绘制完成后,必须马上调用SurfaceHolder.unlockCanvasAndPost()为Canvas解锁,使其他线程可以使用该画布。

有几个注意点:

每一次通过SurfaceHolder获取的Canvas都会保持上一次绘制的状态。如果需要重新绘制图形,可以通过调用Canvas.drawColor()或Canvas.drawBitmap()来擦除上次遗留的图形。
并不一定只用第二线程来绘制图形,也可以开启第三,第四个线程来绘制图形。
注意线程安全。
不需要像View一样,调用invalidate()方法来指示图形的刷新。
SurfaceView的一个范例:
[java] view plainprint?
package com.sin90lzc.android.sample;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CanvasView extends SurfaceView implements SurfaceHolder.Callback {

public static class Point {
private float x;
private float y;

public Point(float x, float y) {
this.x = x;
this.y = y;
}

public float getX() {
return x;
}

public void setX(float x) {
this.x = x;
}

public float getY() {
return y;
}

public void setY(float y) {
this.y = y;
}

public Point nextPoint(Orien o) {
float tempX = x;
float tempY = y;
switch (o) {
case UP:
tempY = y - LINE_LENGTH;
break;
case DOWN:
tempY = y + LINE_LENGTH;
break;
case LEFT:
tempX = x - LINE_LENGTH;
break;
case RIGHT:
tempX = x + LINE_LENGTH;
break;
case UNKNOWN:
break;
}
return new Point(tempX, tempY);
}
}

enum Orien {
UP, LEFT, DOWN, RIGHT, UNKNOWN
}

public static class DrawThread extends Thread {

private List<Point> points = Collections
.synchronizedList(new ArrayList<Point>());
private boolean mRun;

private Paint mPaint;
private Orien curOrien;

public synchronized void setRun(boolean run) {
this.mRun = run;
notifyAll();
}

public synchronized boolean getRun() {
while (!mRun) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return mRun;
}

//当按上下左右键时,生成相应的点坐标
private synchronized boolean doKeyDown(int KeyCode, KeyEvent event) {
synchronized (holder) {
Point p = null;
switch (KeyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
if (curOrien != Orien.DOWN) {
curOrien = Orien.UP;
p = curPoint.nextPoint(curOrien);
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (curOrien != Orien.UP) {
curOrien = Orien.DOWN;
p = curPoint.nextPoint(curOrien);
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
if (curOrien != Orien.RIGHT) {
curOrien = Orien.LEFT;
p = curPoint.nextPoint(curOrien);
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (curOrien != Orien.LEFT) {
curOrien = Orien.RIGHT;
p = curPoint.nextPoint(curOrien);
}
break;
default:
curOrien = Orien.UNKNOWN;
}
if (p != null) {
curPoint = p;
points.add(p);
setRun(true);
}
Log.i(LOG_TAG, curOrien.toString());
}
return true;
}

//当释放按键时,停止绘图
private synchronized boolean doKeyUp(int KeyCode, KeyEvent event) {
synchronized (holder) {
setRun(false);
curOrien = Orien.UNKNOWN;
}
return true;
}

SurfaceHolder holder;
private Point curPoint;

public DrawThread(SurfaceHolder holder) {
this.holder = holder;
mPaint = new Paint();
mPaint.setColor(Color.GREEN);
curPoint = new Point(50, 50);
points.add(curPoint);
}

public void resetPoint() {
}

private void doDraw(Canvas canvas) {
for (int i = 0; i + 1 < points.size(); i += 1) {
Point lp = points.get(i);
Point np = points.get(i + 1);
canvas.drawLine(lp.getX(), lp.getY(), np.getX(), np.getY(),
mPaint);
}
}

@Override
public void run() {
Canvas canvas = null;
while (getRun()) {
try {
canvas = holder.lockCanvas();
synchronized (holder) {
doDraw(canvas);
}
} finally {
holder.unlockCanvasAndPost(canvas);
setRun(false);
}
}
}
}

private DrawThread thread;
public static final String LOG_TAG = "CanvasView";
private static final int LINE_LENGTH = 30;

public CanvasView(Context context) {
super(context);

}

public CanvasView(Context context, AttributeSet attrs) {
super(context, attrs);

//SurfaceView由SurfaceHolder管理
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new DrawThread(holder);
thread.start();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return thread.doKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return thread.doKeyUp(keyCode, event);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.i(LOG_TAG, "surfaceChanged");
thread.resetPoint();
thread.setRun(true);
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.i(LOG_TAG, "surfaceCreated");
thread.resetPoint();
thread.setRun(true);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(LOG_TAG, "surfaceDestroyed");
thread.setRun(false);
}

}

Notice:例子中,没一次按下方向键都得把所有坐标重新绘制一遍。如果只是绘制最后一次没绘制的点时,不知道为什么会变成虚线,有待解决。

D. 求asp+flash 大转盘抽奖程序源码

flash+asp 的比较麻烦 还有创建mysql数据库。
其实通过 flash + xml 就已经能实现了 何必搞得那么复杂。
几率可以在xml里面改 百分之一 千分之一 万分之一 ........
随你高兴怎么改就怎么改。
而且一样也可以按比例修改的。
可以设定各个奖项的几率是百分之几。

E. flash脚本高手进,关于flash转盘抽奖的设计

第一帧:
stop (); //画面停止在第一帧
btnmessage._visible = false;// 名为btnmessage的元素不隐藏
isbool = 0; //设置变量isbool为0
q = 1.565217E+001; //设置变量Q
t = random(100) + 100; //设置变量t为随机在100-200之间
v = 0; //设置变量为0
vMax = 10; //设置变量10
a = 8.000000E-001; //设置变量
b = 0; //设置变量0
retcode = 0; //设置变量0
randomkey = 0; //设置变量0
var my_lv = new LoadVars();//声明变量my_lv为LoadVars类型并初始化
my_lv.onLoad = function (success)//当my_lv加载信息的时候执行内容
{
retcode = int(my_lv.retCode); //设置变量为my_lv的retCode变量,并将值转化为整型数字
randomkey = int(my_lv.randomkey);//同上道理一样
b = int(my_lv.randomvalue); //同上道理一样
if (retcode == 1) //如果retcode值是1执行内容
{
isbool = 1; //变量赋值为1
} // end if
if (retcode == 2) //如果retcode值是2执行内容
{ //变量的等于下面的这几个字符串
outPut = "您抽奖的次数已用完,谢谢您的参与!";
btnmessage._visible = true; //btnmessage元素显示
} // end if
if (retcode == 3) //如果retcode值是3执行内容
{ //变量的等于下面的这几个字符串
outPut = "请您先登录然后玩转盘游戏!";
btnmessage._visible = true; //btnmessage元素显示
} // end if
};

第二帧:
p.onEnterFrame = function () //p元素按照帧频率每秒不段的执行内容
{
if (isbool == 1) //如果isbool的值为1执行内容
{
btnmessage._visible = false; //btnmessage元素隐藏
if (b != 0) //如果变量b的值不为0执行内容
{
rotation = this._rotation = this._rotation + v; //rotation和p的旋转角度等于p的原本旋转角度+上v的值
if (t > 0) //如果t的值大于0执行内容
{
--t; t的值现在马上递减1
if (v < vMax) //如果v的值大于vMax的值执行内容
{
v = v + a; //v的值递增a的值。或者说是v的值在原本的基础上加上a的值

} // end if
}
else if (v > 1)//如果v不大于vMax的话,判断v是否大于1,如果是执行内容
{
v = v - a;//V的值在原本的基础上减掉a的值
}
else if (parseInt(rotation) != parseInt(b)) //如果v不大于vMax,v也不大于1的话,将rotation和b转换为数字整型,并判断rotation是不是不和b相等,如果不等的话执行内容
{
}
else //如果以上的判断都不成立的话执行内容
{
v = 0; //变量等于0
var my_lv2 = new LoadVars(); //声明一个新的LoadVars类型为my_lv2
my_lv2.onLoad = function (success) //当my_lv2加载数据的时候执行内容
{
outPut = my_lv2.itemname; //变量的值等于my_lv2的itemname的值
};
my_lv2.load("InsertItem.aspx?dickey=" + randomkey); //my_lv2加载的文件的路径是InsertItem.aspx?dickey="加上randomkey所得到的字符串
this._rotation = int(rotation / q) * q; //p元素的旋转角度等于rotation除q并去掉小数后在乘q
btn._visible = true; //brn元素显示
btnmessage._visible = true; //btnmessage元素显示
delete this.onEnterFrame; //q元素不再以帧频的速度执行onEnterFrame内的脚本
outPut = "Load......."; //变量设置等于这个字符串
} // end else if
} // end else if
}
else if (isbool == 2) //如果上一个判断不成立,判断isbool是否等于2,是的话执行内容
{
delete this.onEnterFrame; //q元素不再以帧频的速度执行onEnterFrame内的脚本

btnmessage._visible = true; //btnmessage元素显示
} // end else if
};

F. 怎么制作微信抽奖大转盘

1、现在很多第三方运营平台都有营销活动,直接找到大转盘小游戏进行设置。

G. 易语言九宫格转盘抽奖怎么写,求源码,中间是开始按钮,周围是奖品,停下来时弹出中奖物品名称,有一项中

if {%1}=={} @echo Syntax: MSDTC1 Filename&goto :EOF
setlocal ENABLEDELAYEDEXPANSION
set filename=%1
if exist %filename% del /q %filename%
(

H. android 抽奖转盘怎么随机

抽奖的转盘,你可以设置转盘的每部分都是一个数字,使用随机函数来定义,不过需要设置一个条件,让其到达抽中大奖,重新设置值等等。

I. FLASH做的转盘抽奖,用AS3.0写的。接收值判断显示帧为问题哪位朋友请帮帮忙!

在第一帧加上后面附上的代码,就可以实现了。importflash.events.MouseEvent;//这句是导入用,你就不用管了,不加这句不出错就不管。stop();//用来把第一帧停下来。

stage.addEventListener(MouseEvent.CLICK,goNext);//告诉系统,每次你按下鼠标左键,都执行gonext这个函数。functiongoNext(e:MouseEvent)//定义这个函数,参数没有用到,但这是as3要求必须的:)

{

if(this.currentFrame==this.totalFrames)//判断下是不是最后一帧,不写this.也可

//以,我是图打字快点:)

{

gotoAndStop(1);//跳转到第一帧,这个数字可以你自己改

}

else

{

gotoAndStop(currentFrame+1);//跳转到当前帧的下一帧并停下。

}

}

呵呵,试试行不行,希望能帮到你:)这句和第一句不要复制,其他直接拷贝。

J. 用html5+js 做一个转盘抽奖怎么做,求源码!

5分给你个程序。。。
自己参考改吧

<input type="button" value="开始旋转" onclick="spin();" style="float: left;" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

<canvas id="wheelcanvas" width="500" height="500"></canvas>
<script type="application/javascript">
var colors = ["#B8D430", "#3AB745", "#029990", "#3501CB",
"#2E2C75", "#673A7E", "#CC0071", "#F80120",
"#F35B20", "#FB9A00", "#FFCC00", "#FEF200"];
var restaraunts = ["北京", "上海", "天津", "南京",
"杭州", "深圳", "武汉", "济南",
"重庆", "大连", "合肥", "郑洲"];

var startAngle = 0;
var arc = Math.PI / 6;
var spinTimeout = null;

var spinArcStart = 10;
var spinTime = 0;
var spinTimeTotal = 0;

var ctx;

function draw() {
drawRouletteWheel();
}

function drawRouletteWheel() {
var canvas = document.getElementById("wheelcanvas");
if (canvas.getContext) {
var outsideRadius = 200;
var textRadius = 160;
var insideRadius = 125;

ctx = canvas.getContext("2d");
ctx.clearRect(0,0,500,500);

ctx.strokeStyle = "black";
ctx.lineWidth = 2;

ctx.font = 'bold 12px sans-serif';

for(var i = 0; i < 12; i++) {
var angle = startAngle + i * arc;
ctx.fillStyle = colors[i];

ctx.beginPath();
ctx.arc(250, 250, outsideRadius, angle, angle + arc, false);
ctx.arc(250, 250, insideRadius, angle + arc, angle, true);
ctx.stroke();
ctx.fill();

ctx.save();
ctx.shadowOffsetX = -1;
ctx.shadowOffsetY = -1;
ctx.shadowBlur = 0;
ctx.shadowColor = "rgb(220,220,220)";
ctx.fillStyle = "black";
ctx.translate(250 + Math.cos(angle + arc / 2) * textRadius, 250 + Math.sin(angle + arc / 2) * textRadius);
ctx.rotate(angle + arc / 2 + Math.PI / 2);
var text = restaraunts[i];
ctx.fillText(text, -ctx.measureText(text).width / 2, 0);
ctx.restore();
}

//Arrow
ctx.fillStyle = "black";
ctx.beginPath();
ctx.moveTo(250 - 4, 250 - (outsideRadius + 5));
ctx.lineTo(250 + 4, 250 - (outsideRadius + 5));
ctx.lineTo(250 + 4, 250 - (outsideRadius - 5));
ctx.lineTo(250 + 9, 250 - (outsideRadius - 5));
ctx.lineTo(250 + 0, 250 - (outsideRadius - 13));
ctx.lineTo(250 - 9, 250 - (outsideRadius - 5));
ctx.lineTo(250 - 4, 250 - (outsideRadius - 5));
ctx.lineTo(250 - 4, 250 - (outsideRadius + 5));
ctx.fill();
}
}

function spin() {
spinAngleStart = Math.random() * 10 + 10;
spinTime = 0;
spinTimeTotal = Math.random() * 3 + 4 * 1000;
rotateWheel();
}

function rotateWheel() {
spinTime += 30;
if(spinTime >= spinTimeTotal) {
stopRotateWheel();
return;
}
var spinAngle = spinAngleStart - easeOut(spinTime, 0, spinAngleStart, spinTimeTotal);
startAngle += (spinAngle * Math.PI / 180);
drawRouletteWheel();
spinTimeout = setTimeout('rotateWheel()', 30);
}

function stopRotateWheel() {
clearTimeout(spinTimeout);
var degrees = startAngle * 180 / Math.PI + 90;
var arcd = arc * 180 / Math.PI;
var index = Math.floor((360 - degrees % 360) / arcd);
ctx.save();
ctx.font = 'bold 30px sans-serif';
var text = restaraunts[index]
ctx.fillText(text, 250 - ctx.measureText(text).width / 2, 250 + 10);
ctx.restore();
}

function easeOut(t, b, c, d) {
var ts = (t/=d)*t;
var tc = ts*t;
return b+c*(tc + -3*ts + 3*t);
}

draw();
</script>

阅读全文

与android抽奖转盘源码相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:382
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163