转自http://www.eoeandroid.com/forum.php?mod=viewthread&tid=229066

一个java android 时钟 非常精致!android 小创意_第1张图片


部分核心代码:
代码片段,双击复制
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 public void paint(Graphics g1) { // Graphics2D继承Graphics,比Graphics提供更丰富的方法 Graphics2D g = (Graphics2D) g1; /** ***画圆形时钟的刻度,每6度便有一个刻度**** */ for ( int i = 0 ; i < 360 ; i = i + 6 ) { g.setColor(Color.gray); // 设置画笔的宽度为2 g.setStroke( new BasicStroke( 2 )); // 画刻度 if (i % 90 == 0 ) { // 对于0,3,6,9点位置,使用一个大的刻度 g.setColor(Color.pink); g.setStroke( new BasicStroke( 7 )); // 画笔宽度为5 // 当起点和终点一样时,画的就是点 g.drawLine( CIRCLE_X + ( int ) (Math.cos(i * Math.PI / 180 ) * CIRCLE_X_RADIUS), CIRCLE_Y + ( int ) (Math.sin(i * Math.PI / 180 ) * CIRCLE_Y_RADIUS), CIRCLE_X + ( int ) (Math.cos(i * Math.PI / 180 ) * CIRCLE_X_RADIUS), CIRCLE_Y + ( int ) (Math.sin(i * Math.PI / 180 ) * CIRCLE_Y_RADIUS)); } else if (i % 30 == 0 ) { // 如果角度处于小时的位置,而且还不在0,3,6,9点时,画红色的小刻度 g.setColor(Color.orange); g.setStroke( new BasicStroke( 3 )); // 画笔宽度为3 g.drawLine( CIRCLE_X + ( int ) (Math.cos(i * Math.PI / 180 ) * CIRCLE_X_RADIUS), CIRCLE_Y + ( int ) (Math.sin(i * Math.PI / 180 ) * CIRCLE_Y_RADIUS), CIRCLE_X + ( int ) (Math.cos(i * Math.PI / 180 ) * CIRCLE_X_RADIUS), CIRCLE_Y + ( int ) (Math.sin(i * Math.PI / 180 ) * CIRCLE_Y_RADIUS)); } else { // 其他位置就画小刻度 g.setColor(Color.gray); g.drawLine( CIRCLE_X + ( int ) (Math.cos(i * Math.PI / 180 ) * CIRCLE_X_RADIUS), CIRCLE_Y + ( int ) (Math.sin(i * Math.PI / 180 ) * CIRCLE_Y_RADIUS), CIRCLE_X + ( int ) (Math.cos(i * Math.PI / 180 ) * CIRCLE_X_RADIUS), CIRCLE_Y + ( int ) (Math.sin(i * Math.PI / 180 ) * CIRCLE_Y_RADIUS)); } } /** ****** 画时钟的指针 ******** */ // 画时针 Line2D.Double lh = new Line2D.Double(CIRCLE_X, CIRCLE_Y, CIRCLE_X + Math.cos((arcHour - 90 ) * Math.PI / 180 ) * HOUR_LENGTH, CIRCLE_Y + Math.sin((arcHour - 90 ) * Math.PI / 180 ) * HOUR_LENGTH); // 设置画笔宽度和颜色 g.setStroke( new BasicStroke( 8 )); g.setColor(Color.pink); // 利用Graphics2D的draw方法画线 g.draw(lh); // 画分针 Line2D.Double lm = new Line2D.Double(CIRCLE_X, CIRCLE_Y, CIRCLE_X + Math.cos((arcMin - 90 ) * Math.PI / 180 ) * MIN_LENGTH, CIRCLE_Y + Math.sin((arcMin - 90 ) * Math.PI / 180 ) * MIN_LENGTH); g.setStroke( new BasicStroke( 4 )); g.setColor(Color.orange); g.draw(lm); // 画秒针 Line2D.Double ls = new Line2D.Double(CIRCLE_X, CIRCLE_Y, CIRCLE_X + Math.cos((arcSec - 90 ) * Math.PI / 180 ) * SEC_LENGTH, CIRCLE_Y + Math.sin((arcSec - 90 ) * Math.PI / 180 ) * SEC_LENGTH); g.setStroke( new BasicStroke( 1 )); g.setColor(Color.lightGray); g.draw(ls); /** **** 画时钟背景,并将其透明处理 ******* */ // 所有使用bufferedImageGraphics画的图像,都画在bufferedImage上, // drawImage方法的参数含义分别是:背景图片对象、目标位置第一个角的X、Y坐标、目标位置第二个角的X、Y坐标、 // 源位置第一个角的X、Y坐标、源位置第二个角的X、Y坐标、图像对象改变时的通知接受者 bufferedImageGraphics.drawImage(img[imageID], 0 , 0 , imageSize, imageSize, 0 , 0 , imageSize + 10 , imageSize + 10 , this ); // 将背景图片透明化 for ( int j = 0 ; j < imageSize; j++) { for ( int i = 0 ; i < imageSize; i++) { // 获得背景图像中(i, j)坐标的颜色值 int pix = bufferedImage.getRGB(i, j); Color c = new Color(pix); int R = c.getRed(); int G = c.getGreen(); int B = c.getBlue(); // 通过Color对象的alpha,使颜色透明。 int newpix = new Color(R, G, B, alpha).getRGB(); // 重新设置背景图像该象素点的颜色 bufferedImage.setRGB(i, j, newpix); } } /** 以上画背景操作都是画在bufferedImage上的,这里要将bufferedImage画在ClockLabel **/ // 将当前用户剪贴区 Clip 与椭圆区域相交,并将 Clip 设置为所得的交集 g.clip( new Ellipse2D.Double( 95 , 45 , imageSize, imageSize)); g.setColor(Color.white); // 在用户剪贴区画bufferedImage g.drawImage(bufferedImage, 95 , 45 , this ); }


一个精美的java时钟 (自动换背景 秒针平滑移动) - 云代码http://yuncode.net/code/c_50a4b7d13f80f60

更多相关文章

  1. android GPS 获取位置
  2. Android对话框的高级设置《二》设置对话框按钮的透明度和对话框
  3. 00015-相对布局位置属性
  4. android 自定义TextView实现秒级数字时钟
  5. 设置Android程序的默认安装位置
  6. Android API指南(二)自定义控件04之 位置说明
  7. Android RadioButton背景图片和文字的相对位置
  8. 控件位置
  9. RadioButton 选择框的位置

随机推荐

  1. android一个很恶心的东西
  2. 让android下的Chronometer能正常暂停和继
  3. 树莓派遇见Android(安卓)Things系列教程
  4. Android之Retrofit和RxJava的结合使用
  5. Android高手进阶教程(十九)---Android中
  6. Android应用屏幕适应问题的解决
  7. Android(安卓)动画机制(二)
  8. Android基础入门教程——8.1.1 Android中
  9. android:AsyncTask实现异步处理任务
  10. Android(安卓)改变字体颜色的三种方法