国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android抽獎輪盤的制作方法

2019-10-22 18:29:12
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android抽獎輪盤的具體代碼,供大家參考,具體內容如下

main布局(圖片資源請自行尋找,抱歉)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:layout_gravity="center">  <ImageView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:src="@drawable/bigwheelgg"    />  <ImageView    android:id="@+id/light"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:src="@drawable/light"    />  <ImageView    android:id="@+id/main_wheel"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:src="@drawable/bigwheel"    />  <ImageView    android:id="@+id/point"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:src="@drawable/point"    /></FrameLayout>

main代碼

//設置一個時間常量,此常量有兩個作用,1.圓燈視圖顯示與隱藏中間的切換時間;2.指針轉一圈所需要的時間,現設置為500毫秒private static final long ONE_WHEEL_TIME = 500;//記錄圓燈視圖是否顯示的布爾常量private boolean lightsOn = true;//開始轉動時候的角度,初始值為0private 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();  }};@Overrideprotected 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);}@Overridepublic 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;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿城市| 花莲市| 宣威市| 台东市| 肇东市| 雷山县| 张家川| 天峨县| 宁陕县| 沙雅县| 鄂伦春自治旗| 化德县| 景谷| 铜山县| 平潭县| 宁阳县| 河池市| 密云县| 桂阳县| 大荔县| 浙江省| 灵石县| 巨野县| 尼勒克县| 松江区| 合江县| 雷波县| 山阳县| 道孚县| 兰坪| 简阳市| 浦城县| 九江市| 新蔡县| 枝江市| 思南县| 望城县| 泰兴市| 洛阳市| 海城市| 新晃|