使用Drawable实时画时钟

来源:互联网 发布:mac mini拆机 编辑:程序博客网 时间:2024/06/05 14:56

近来在学习drawable的使用,写了一个根据传入的date绘图的drawable。主要绘图动作是在 draw()函数,结合Canvas ,Paint的基本使用来完成绘制。

public class MainActivity extends ActionBarActivity {    private final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ImageView imageView = (ImageView) findViewById(R.id.iv_test);        imageView.setImageDrawable(new ClockDrawable(new Date(), Color.BLACK, 50f));    }    class ClockDrawable extends Drawable {        private float hour, min, radius, hourLen, minLen;        private int color;        private int margin = 3;        ClockDrawable(Date d, int c, float r) {            SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm");            String time = dateFormat.format(d);            GregorianCalendar calendar = new GregorianCalendar();            calendar.setTime(d);            hour = calendar.get(Calendar.HOUR_OF_DAY);            min = calendar.get(Calendar.MINUTE);            System.out.println(hour + ":" + min);            color = c;            radius = r;            minLen = r * (8f / 10f);            hourLen = r * (6f / 10f);        }        @Override        public void draw(Canvas canvas) {            canvas.translate(radius + margin, radius + margin);            Paint paint = new Paint();            paint.setColor(color);            paint.setAntiAlias(true);            paint.setStyle(Paint.Style.STROKE);            double hourAgl = Math.toRadians(360 * ((hour + min / 60) / 12f));//            canvas.drawLine(0, 0, (float) (hourLen * Math.sin(hourAgl)), -(float) (hourLen * Math.cos(hourAgl)), paint);            double minAgl = Math.toRadians(360 * (min / 60f));            canvas.drawLine(0, 0, (float) (minLen * Math.sin(minAgl)), -(float) (minLen * Math.cos(minAgl)), paint);            canvas.drawCircle(0, 0, radius, paint);        }        @Override        public int getIntrinsicWidth() {            return (int) (radius + margin) * 2;        }        @Override        public int getIntrinsicHeight() {            return (int) (radius + margin) * 2;        }        @Override        public void setAlpha(int alpha) {        }        @Override        public void setColorFilter(ColorFilter cf) {        }        @Override        public int getOpacity() {            return 0;        }    }}

layout里就只有Imageview,就不贴出来了,绘制的效果图是这样的:
Drawable实时画时钟效果图

0 0