热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android抽奖轮盘的制作方法

这篇文章主要为大家详细介绍了Android抽奖轮盘的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android抽奖轮盘的具体代码,供大家参考,具体内容如下

main布局(图片资源请自行寻找,抱歉)


main代码

//设置一个时间常量,此常量有两个作用,1.圆灯视图显示与隐藏中间的切换时间;2.指针转一圈所需要的时间,现设置为500毫秒
private static final long ONE_WHEEL_TIME = 500;
//记录圆灯视图是否显示的布尔常量
private boolean lightsOn = true;
//开始转动时候的角度,初始值为0
private int startDegree = 0;

private ImageView lightIv;
private ImageView pointIv;
private ImageView wheelIv;

//指针转圈圈数数据源
private int[] laps = { 5, 7, 10, 15 };
//指针所指向的角度数据源,因为有6个选项,所有此处是6个值
private int[] angles = { 0, 60, 120, 180, 240, 300 };
//转盘内容数组
private String[] lotteryStr = { "索尼PSP", "10元红包", "谢谢参与", "DNF钱包",
    "OPPO MP3", "5元红包", };

//子线程与UI线程通信的handler对象
private Handler mHandler = new Handler() {

  public void handleMessage(android.os.Message msg) {
    switch (msg.what) {
      case 0:
        if (lightsOn) {
          // 设置lightIv不可见
          lightIv.setVisibility(View.INVISIBLE);
          lightsOn = false;
        } else {
          // 设置lightIv可见
          lightIv.setVisibility(View.VISIBLE);
          lightsOn = true;
        }
        break;

      default:
        break;
    }
  };

};

//监听动画状态的监听器
private Animation.AnimationListener al = new Animation.AnimationListener() {

  @Override
  public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub

  }

  @Override
  public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub

  }

  @Override
  public void onAnimationEnd(Animation animation) {
    String name = lotteryStr[startDegree % 360 / 60];
    Toast.makeText(MainActivity.this, name, Toast.LENGTH_LONG).show();
  }
};


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  setupViews();
  flashLights();

  pointIv.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
      int lap = laps[(int) (Math.random() * 4)];
      int angle = angles[(int) (Math.random() * 6)];
      //每次转圈角度增量
      int increaseDegree = lap * 360 + angle;
      //初始化旋转动画,后面的四个参数是用来设置以自己的中心点为圆心转圈
      RotateAnimation rotateAnimation = new RotateAnimation(
          startDegree, startDegree + increaseDegree,
          RotateAnimation.RELATIVE_TO_SELF, 0.5f,
          RotateAnimation.RELATIVE_TO_SELF, 0.5f);
      //将最后的角度赋值给startDegree作为下次转圈的初始角度
      startDegree += increaseDegree;
      //计算动画播放总时间
      long time = (lap + angle / 360) * ONE_WHEEL_TIME;
      //设置动画播放时间
      rotateAnimation.setDuration(time);
      //设置动画播放完后,停留在最后一帧画面上
      rotateAnimation.setFillAfter(true);
      //设置动画的加速行为,是先加速后减速
      rotateAnimation.setInterpolator(MainActivity.this,
          android.R.anim.accelerate_decelerate_interpolator);
      //设置动画的监听器
      rotateAnimation.setAnimationListener(al);
      //开始播放动画
      pointIv.startAnimation(rotateAnimation);
    }
  });

}

private void setupViews(){
  lightIv = (ImageView) findViewById(R.id.light);
  pointIv = (ImageView) findViewById(R.id.point);
  wheelIv = (ImageView) findViewById(R.id.main_wheel);
}

//控制灯圈动画的方法
private void flashLights() {

  Timer timer = new Timer();
  TimerTask tt = new TimerTask() {

    @Override
    public void run() {
      // 向UI线程发送消息
      mHandler.sendEmptyMessage(0);

    }
  };

  // 每隔ONE_WHEEL_TIME毫秒运行tt对象的run方法
  timer.schedule(tt, 0, ONE_WHEEL_TIME);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Python作为一种广泛使用的高级编程语言,以其简洁的语法、强大的功能和丰富的库支持著称。本文将详细介绍Python的主要特点及其在现代软件开发中的应用。 ... [详细]
  • 本文详细介绍了如何手动编写兼容IE的Ajax函数,以及探讨了跨域请求的实现方法和原理,包括JSONP和服务器端设置HTTP头部等技术。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • 使用Adobe Illustrator打造独特的家族徽章:牡鹿图腾设计教程
    本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ... [详细]
  • 本文介绍如何使用 jQuery 的 AJAX 方法从服务器获取 JSON 数据,并通过遍历这些数据来创建包含公司及其产品信息的数组。 ... [详细]
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • BME框架使用中的典型问题解析
    本文主要探讨了BME框架在实际应用中遇到的一些常见问题,包括查询条件为空、动态参数处理及分页查询等场景的解决方案。 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • 设计模式笔记12:迭代器模式(Iterator Pattern) ... [详细]
  • 本文介绍了NHibernate中通过定义接口和实现类来管理会话工厂的方法,包括接口的优势、模型文件夹的结构以及具体的代码示例。 ... [详细]
  • 本文介绍了jQuery的基本使用方法及AJAX技术的基础知识,包括选择器、事件处理、DOM操作、动画效果等核心功能,以及如何利用AJAX实现页面的部分刷新。 ... [详细]
  • 深入理解Hibernate延迟加载机制
    本文探讨了Hibernate框架中的延迟加载(懒加载)特性,分析其对程序性能的影响及实现原理,同时提供了具体的代码示例来说明如何配置和使用延迟加载。 ... [详细]
  • 本文详细解析了Tomcat服务器的核心配置文件server.xml,包括其主要功能、结构组成及各标签的具体作用。 ... [详细]
author-avatar
拍友2602924913
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有