Android实现可点击的幸运大转盘

  

之前的项目有一个幸运大转盘的功能,在网上找了很久,都没有合适的方法。

  

 Android实现可点击的幸运大转盘

  

 Android实现可点击的幸运大转盘”> <br/>
  </p>
  <p>这是效果图,实现目标:十二星座的图片可点击切换选中效果,根据选择不同的星座,实现不同的方法。之前网上的都是带有指针的,或者可点击改变效果,但是并不知道选择的到底是哪个,即虚拟选择。</p>
  <p>实现该功能的主要代码如下:<br/>
  </p>
  <p> 1,自定义一个布的局,存放图片,实现圆形布局。</p>
  
  <pre类=/* *   *   *   * CircleMenuLayout.java   *   * @author wuxiaosu   *   */公开课CircleMenuLayout延伸ViewGroup {/* *   *布局的半径   */私人int mRadius;/* *   *该容器内儿童项目的默认尺寸   */私有静态最终浮RADIO_DEFAULT_CHILD_DIMENSION f=1;/* *   *菜单的中心孩子的默认尺寸   */私人浮动RADIO_DEFAULT_CENTERITEM_DIMENSION=1/3 f;/* *   *该容器的内边距,无视填充属性,如需边距请用该变量   */私有静态最终浮RADIO_PADDING_LAYOUT=1/12 f;/* *   *该容器的内边距,无视填充属性,如需边距请用该变量   */私人mPadding浮动;/* *   *布局时的开始角度   */私人双mStartAngle=0;/* *   *菜单项的文本   */私人String [] mItemTexts;/* *   *菜单项的图标   */私人int [] mItemImgs;/* *   *菜单的个数   */私人int mMenuItemCount;      私人int mMenuItemLayoutId=R.layout.circle_menu_item;      公共CircleMenuLayout(上下文语境,AttributeSet attrs) {   超级(上下文,attrs);//无视填充   setPadding (0, 0, 0, 0);   }/* *   *设置布局的宽高,并策略菜单项宽高   */@Override   保护空白>   & lt; com.zhcl.yqwan.lucky.rotation.circle.CircleMenuLayout   android: id=癅 + id/id_menulayout”   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android: layout_gravity="中心"   android:背景=癅drawable/ratote_bg_two”比;      & lt;使用   android: id=癅 + id/id_circle_menu_item_center”   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android:可见性=跋А痹?   & lt;/RelativeLayout>   & lt;/com.zhcl.yqwan.lucky.rotation.circle.CircleMenuLayout>      之前      

该处主要是自定义控件使用位置的布局。

  

3,活动中调用

  

     /* *   *设置属性或者星座的图片,并绘制图形   *   * @param def   * @param img   * @param selectedImg   * @param str   * @param类型   *:区分星座和生肖,1——星座,2——生肖。   */私人空间setRotateSelectedImg(最后一个int [] def,最终int [] img,   最后的int [] selectedImg, String [] str,最后int类型){   mCircleMenuLayout。setMenuItemIconsAndTexts (def, str);      mCircleMenuLayout   .setOnMenuItemClickListener(新OnMenuItemClickListener () {      @Override   公共空间itemClick(视图视图,int pos) {//如果是第一次进来,将之前默认选中项的改变为原来的颜色//如果选中的指数和默认的指数不同,则将默认的设置为原来的颜色//Toast.makeText (LotteryRotationActivity.this//" pos=" + pos Toast.LENGTH_SHORT),告诉();//选中的指数   selectedIndex=pos;      如果(pos !=0,,类型==1){   img [0]=mConstellationImgs [0];   }else if (pos !=0,,类型==2){   img [0]=mAnimalImgs [0];   }      mCircleMenuLayout.removeAllViews ();//mCircleMenuLayout=(CircleMenuLayout)//findViewById (R.id.id_menulayout);//替换选中的图片   replaceImg=img (pos);   img (pos)=selectedImg (pos);//设置图片   mCircleMenuLayout.setMenuItemIconsAndTexts (img,   mItemTexts);//还原图片、方便下一次点击替换   img (pos)=replaceImg;   }      @Override   公共空间itemCenterClick(查看视图){      }   });      }//星座:最开始默认选择一个   setRotateSelectedImg (mConstellationImgsDefult mConstellationImgs,   mConstellationImgsSelected mAnimalStr 1);      

这里定义了一个setRotateSelectedImg的方法,方便使用,其中最后一个int [] def,最终int [] img,最终int [] selectedImg,是三个图片数组,分别是初始化时默认的选中状态的图片数组(有一个被选中),全部未选中的图片数组,选中后的图片数组(不同于默认的图片数组),String [] str是字符串数组,由于文字已经在切图中给出,此处可忽略。

Android实现可点击的幸运大转盘