现在很多的播放器的播放界面都是采用光盘的转动,下面是我仿造网易的播放界面,先上两张图:
第一张为播放前的界面,第二张为点击播放按钮的图片。布局文件如下:
& lt; RelativeLayout xmlns: android=" http://schemas.android.com/apk/res/android " android: layout_width=" match_parent " android: layout_height=" match_parent " android:背景=" # ffffff "比; LinearLayout & lt; android: layout_width=" match_parent " android: layout_height=" match_parent " 面向android:=按怪薄北? & lt;使用 android: layout_width="宽和" android: layout_height=" 48 dp " android:背景=" # 222222 "比; & lt; ImageView android: id=癅 + id/back_main_activity” android: layout_width=" 40 dp " android: layout_height=" 40 dp " android: layout_centerVertical=" true " android: layout_marginLeft=" 5 dp " android:背景=癅drawable/back_main_view”/比; & lt; TextView android: id=癅 + id/play_music_name” android: layout_width=" wrap_content " android: layout_height=" 40 dp " android: layout_centerInParent=" true " android: layout_marginLeft=" 10 dp” android: layout_toRightOf=癅 + id/back_main_activity” android: paddingTop=" 5 dp " android:文本="音乐" android:输入textColor=" # ffffff " android: textSize=" 20 dp/比; & lt;/RelativeLayout> & lt;使用 android: id=癅 + id/play_disc” android: layout_width="宽和" android: layout_height=" wrap_content " android:重力="中心| center_vertical”比; & lt;/RelativeLayout> & lt;/LinearLayout> LinearLayout & lt; android: layout_width="宽和" android: layout_height=" 80 dp” android: layout_below=癅 + id/seekbarLayout” android:背景=" # 222222 " android:重力=" center_horizontal " 面向android:="水平" android: layout_alignParentBottom=" true "比; & lt; ImageView android: id=癅 + id/music_paly_pause” android: layout_width=" 80 dp” android: layout_height="宽和" android:背景=癅drawable/play_btn_play”/比; & lt;/LinearLayout> & lt;/RelativeLayout> >之前MainActivity的代码如下:
公开课MainActivity延伸活动{ 私人RelativeLayout playDisc; 私人MusicPlayDiscView MusicPlayDiscView;//播放按钮 私人ImageView playMusic; @Override 保护空白> 公开课MusicPlayDiscView扩展视图{ 油漆涂料; 私人处理程序处理程序;//光盘图片 位图bitmapDisc=BitmapFactory.decodeResource (getresource (), R.drawable.play_disc);//专辑图片 位图bitmapImage=BitmapFactory.decodeResource (getresource (), R.drawable.music_play_people); 位图bitmapCircularAblum bitmapDiscCircular;//光盘指针图片 位图bitmapNeedle=BitmapFactory.decodeResource (getresource (), R.drawable.play_needle); 公共MusicPlayDiscView(上下文语境){ 超级(上下文);//分别获得光盘和专辑的圆形图片 bitmapCircularAblum=getCircularBitmap (bitmapImage, 400); bitmapDiscCircular=getCircularBitmap (bitmapDisc, bitmapDisc.getWidth ()); 涂=new (); 处理程序=new处理程序(); handler.post(可运行); }/* * *利用线程不断更新界面 */私人Runnable Runnable=new Runnable () { 公共空间run () { postInvalidate (); 处理程序。postDelayed (runnable, 50); } };//状态标志: int之前=0;//角度标志 私人int degreeFlag=0; @Override 保护无效onDraw(帆布画布){ super.onDraw(画布);/* * *先画光盘与专辑图片 */如果(常数。现状后==Constant.Play) { Constant.Degree + +; 如果(常数。度比;360) 常数。度=0; degreeFlag=Constant.Degree; canvas.save ();//360为屏幕的中间位置,手机是720的宽度 canvas.rotate(常数。学位,360年, 170 + bitmapDiscCircular.getHeight ()/2); canvas.drawBitmap (bitmapCircularAblum 360 - bitmapCircularAblum.getWidth()/2, 200年,油漆); canvas.drawBitmap (bitmapDisc 360 - bitmapDiscCircular.getWidth()/2, 170年,油漆); canvas.restore (); 其他}{//前=0; canvas.save (); 画布。旋转(degreeFlag, 360, 170 + bitmapDiscCircular.getHeight ()/2); canvas.drawBitmap (bitmapCircularAblum 360 - bitmapCircularAblum.getWidth()/2, 200年,油漆); canvas.drawBitmap (bitmapDisc 360 - bitmapDiscCircular.getWidth()/2, 170年,油漆); canvas.restore (); }/* * *再画光盘指针图片,三张图不能同时画 */如果(常数。现状后==常数。玩){ 画布。drawBitmap (360 - bitmapNeedle.getWidth bitmapNeedle ()/2, 0、油漆); 其他}{ canvas.save (); 矩阵矩阵=new矩阵(); matrix.postRotate (-45); paint.setAntiAlias(真正的);//获得指针旋转后的图片 位图bm=位图。createBitmap (bitmapNeedle 0 0, bitmapNeedle.getHeight bitmapNeedle.getWidth(),(),矩阵, 真正的); 画布。drawBitmap (bm, 360 - bitmapNeedle.getWidth()/2 + 5, -60年, 油漆); canvas.restore (); } }/* * *获得圆形图片的方法 * */私人位图getCircularBitmap(位图的位图,int半径){ 位图sbmp=位图。createScaledBitmap(位图,半径,半径,假); 位图输出=Bitmap.createBitmap (sbmp.getWidth (), sbmp.getHeight (), Config.ARGB_8888); 帆布画布=新画布(输出); 涂漆=new (); 矩形矩形=new矩形(0,0,sbmp.getWidth (), sbmp.getHeight ()); paint.setAntiAlias(真正的); paint.setFilterBitmap(真正的); paint.setDither(真正的); 画布。drawARGB (0, 0, 0, 0); paint.setColor (Color.BLACK); canvas.drawCircle (sbmp.getWidth ()/2, sbmp.getHeight ()/2, sbmp.getWidth()/2、油漆); 油漆。setXfermode(新PorterDuffXfermode (Mode.SRC_IN)); 画布。drawBitmap (sbmp,矩形,矩形,油漆); 返回输出; } } null null null nullAndroid仿网易云音乐播放界面