[java] view plain copy print ?
  1. packagecom.smart.impl;
  2. importjava.util.Calendar;
  3. importandroid.content.Context;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.BitmapFactory;
  6. importandroid.graphics.Canvas;
  7. importandroid.graphics.Paint;
  8. importandroid.graphics.Rect;
  9. importandroid.os.Handler;
  10. importandroid.util.AttributeSet;
  11. importandroid.view.View;
  12. publicclassHandClockextendsViewimplementsRunnable
  13. {
  14. privateintclockImageResourceId;
  15. privateBitmapbitmap;
  16. privatefloatscale;
  17. privatefloathandCenterWidthScale;
  18. privatefloathandCenterHeightScale;
  19. privateintminuteHandSize;
  20. privateinthourHandSize;
  21. privateHandlerhandler=newHandler();
  22. @Override
  23. publicvoidrun()
  24. {
  25. //重新绘制View
  26. invalidate();
  27. //重新设置定时器,在60秒后调用run方法
  28. handler.postDelayed(this,60*1000);
  29. }
  30. @Override
  31. protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec)
  32. {
  33. super.onMeasure(widthMeasureSpec,heightMeasureSpec);
  34. //根据图像的实际大小等比例设置View的大小
  35. setMeasuredDimension((int)(bitmap.getWidth()*scale),(int)(bitmap
  36. .getHeight()*scale));
  37. }
  38. @Override
  39. protectedvoidonDraw(Canvascanvas)
  40. {
  41. super.onDraw(canvas);
  42. Paintpaint=newPaint();
  43. Rectsrc=newRect();
  44. Recttarget=newRect();
  45. src.left=0;
  46. src.top=0;
  47. src.right=bitmap.getWidth();
  48. src.bottom=bitmap.getHeight();
  49. target.left=0;
  50. target.top=0;
  51. target.bottom=(int)(src.bottom*scale);
  52. target.right=(int)(src.right*scale);
  53. //画表盘图像
  54. canvas.drawBitmap(bitmap,src,target,paint);
  55. //计算表盘中心点的横纵坐标
  56. floatcenterX=bitmap.getWidth()*scale*handCenterWidthScale;
  57. floatcenterY=bitmap.getHeight()*scale*handCenterHeightScale;
  58. //表表盘中心点画一个半径为5的实心圆圈
  59. canvas.drawCircle(centerX,centerY,5,paint);
  60. //设置分针为3个象素粗
  61. paint.setStrokeWidth(3);
  62. Calendarcalendar=Calendar.getInstance();
  63. intcurrentMinute=calendar.get(Calendar.MINUTE);
  64. intcurrentHour=calendar.get(Calendar.HOUR);
  65. //计算分针和时间的角度
  66. doubleminuteRadian=Math
  67. .toRadians((360-((currentMinute*6)-90))%360);
  68. doublehourRadian=Math.toRadians((360-((currentHour*30)-90))
  69. %360-(30*currentMinute/60));
  70. //在表盘上画分针
  71. canvas.drawLine(centerX,centerY,(int)(centerX+minuteHandSize
  72. *Math.cos(minuteRadian)),(int)(centerY-minuteHandSize
  73. *Math.sin(minuteRadian)),paint);
  74. //设置实针为4个象素粗
  75. paint.setStrokeWidth(4);
  76. //在表盘上画分针
  77. canvas.drawLine(centerX,centerY,(int)(centerX+hourHandSize
  78. *Math.cos(hourRadian)),(int)(centerY-hourHandSize
  79. *Math.sin(hourRadian)),paint);
  80. }
  81. publicHandClock(Contextcontext,AttributeSetattrs)
  82. {
  83. super(context,attrs);
  84. //读取相应的属性值
  85. clockImageResourceId=attrs.getAttributeResourceValue(null,
  86. "clockImageSrc",0);
  87. if(clockImageResourceId>0)
  88. bitmap=BitmapFactory.decodeResource(getResources(),
  89. clockImageResourceId);
  90. scale=attrs.getAttributeFloatValue(null,"scale",1);
  91. handCenterWidthScale=attrs.getAttributeFloatValue(null,
  92. "handCenterWidthScale",bitmap.getWidth()/2);
  93. handCenterHeightScale=attrs.getAttributeFloatValue(null,
  94. "handCenterHeightScale",bitmap.getHeight()/2);
  95. //在读取分针和时针长度后,将其值按图像的缩放比例进行缩放
  96. minuteHandSize=(int)(attrs.getAttributeIntValue(null,
  97. "minuteHandSize",0)*scale);
  98. hourHandSize=(int)(attrs.getAttributeIntValue(null,"hourHandSize",
  99. 0)*scale);
  100. intcurrentSecond=Calendar.getInstance().get(Calendar.SECOND);
  101. //将定时器设在0分时执行run方法
  102. handler.postDelayed(this,(60-currentSecond)*1000);
  103. }
  104. @Override
  105. protectedvoidonDetachedFromWindow()
  106. {
  107. super.onDetachedFromWindow();
  108. //删除回调类
  109. handler.removeCallbacks(this);
  110. }}

更多相关文章

  1. Android(安卓)全屏无标题详解
  2. android webview设置自适应任意大小的pc网页
  3. Android(安卓)去掉title bar的3个方法
  4. Android中设置全屏的方法
  5. android之渐变色背景
  6. Android(安卓)跳转+两种ListView+ListheaderView
  7. android 横屏 竖屏 全屏 当前屏幕宽 高
  8. Android中自动跳转到系统设置界面
  9. TabLayout 设置指示器宽度问题

随机推荐

  1. Android(安卓)ant 命令行手动编译打包详
  2. Android(安卓)-wifi 直连(wifi direct )
  3. Android(安卓)使用Glide加载图片变色
  4. 重学Android——View的事件分发
  5. Android(安卓)glide 4.x找不到GlideApp
  6. Android(安卓)WebView Scrolling Perform
  7. Android图片压缩——Luban鲁班压缩
  8. android dpi dp 和px之间的关系
  9. android 使用SharedPreferences保存list
  10. android的sd卡上创建目录不显示