栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用自定义原始类的android AnalogClock设置时间

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用自定义原始类的android AnalogClock设置时间

使用setTime()方法工作自定义MyAnalogClock。

花了一些时间后,我终于设法解决了这个问题。我希望这对某人有用。您只需调用setTime(hours,minutes,seconds)方法即可设置时间。

import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.text.format.Time;import android.util.AttributeSet;import android.view.View;import android.widget.RemoteViews.RemoteView;@RemoteViewpublic class MyAnalogClock extends View {    private Drawable mHourHand;    private Drawable mMinuteHand;    private Drawable mSecondHand;    private Drawable mDial;    private int mDialWidth;    private int mDialHeight;    private float mSeconds;    private float mMinutes;    private float mHour;    Context mContext;    public MyAnalogClock(Context context) {        super(context);    }    public MyAnalogClock(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public MyAnalogClock(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        Resources r = context.getResources();        TypedArray a =     context.obtainStyledAttributes(  attrs, R.styleable.AnalogClock, defStyle, 0);        mContext=context;       // mDial = a.getDrawable(com.android.internal.R.styleable.AnalogClock_dial);       // if (mDial == null) { mDial = r.getDrawable(R.drawable.clock_dial);       // }      //  mHourHand = a.getDrawable(com.android.internal.R.styleable.AnalogClock_hand_hour);      //  if (mHourHand == null) { mHourHand = r.getDrawable(R.drawable.clock_hour);      //  }     //   mMinuteHand = a.getDrawable(com.android.internal.R.styleable.AnalogClock_hand_minute);     //   if (mMinuteHand == null) { mMinuteHand = r.getDrawable(R.drawable.clock_minute); mSecondHand = r.getDrawable(R.drawable.clockgoog_minute);     //   }        mDialWidth = mDial.getIntrinsicWidth();        mDialHeight = mDial.getIntrinsicHeight();    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int widthMode = MeasureSpec.getMode(widthMeasureSpec);        int widthSize =  MeasureSpec.getSize(widthMeasureSpec);        int heightMode = MeasureSpec.getMode(heightMeasureSpec);        int heightSize =  MeasureSpec.getSize(heightMeasureSpec);        float hScale = 1.0f;        float vScale = 1.0f;        if (widthMode != MeasureSpec.UNSPECIFIED && widthSize < mDialWidth) { hScale = (float) widthSize / (float) mDialWidth;        }        if (heightMode != MeasureSpec.UNSPECIFIED && heightSize < mDialHeight) { vScale = (float )heightSize / (float) mDialHeight;        }        float scale = Math.min(hScale, vScale);        setMeasuredDimension(resolveSize((int) (mDialWidth * scale), widthMeasureSpec),     resolveSize((int) (mDialHeight * scale), heightMeasureSpec));    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //Here you can set the size of your clock        int availableWidth = 70;        int availableHeight = 70;        //Actual size        int x = availableWidth / 2;        int y = availableHeight / 2;        final Drawable dial = mDial;        int w = dial.getIntrinsicWidth();        int h = dial.getIntrinsicHeight();        boolean scaled = false;        if (availableWidth < w || availableHeight < h) { scaled = true; float scale = Math.min((float) availableWidth / (float) w,  (float) availableHeight / (float) h); canvas.save(); canvas.scale(scale, scale, x, y);        }        dial.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));        dial.draw(canvas);        canvas.save();        canvas.rotate(mHour / 12.0f * 360.0f, x, y);        w = mHourHand.getIntrinsicWidth();        h = mHourHand.getIntrinsicHeight();        mHourHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));        mHourHand.draw(canvas);        canvas.restore();        canvas.save();        canvas.rotate(mMinutes / 60.0f * 360.0f, x, y);        w = mMinuteHand.getIntrinsicWidth();        h = mMinuteHand.getIntrinsicHeight();        mMinuteHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));        mMinuteHand.draw(canvas);        canvas.restore();        canvas.save();        canvas.rotate(mSeconds, x, y);        w = mSecondHand.getIntrinsicWidth();        h = mSecondHand.getIntrinsicHeight();        mSecondHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));        mSecondHand.draw(canvas);        canvas.restore();        if (scaled) { canvas.restore();        }    }    public void setTime(int hours, int minutes, int seconds)    {        mSeconds = 6.0f*seconds;        mMinutes = minutes + seconds / 60.0f;        mHour = hours + mMinutes / 60.0f;    }}

您还应该在可绘制文件夹中放置4个可绘制文件,并使用以下代码在values文件夹中创建(或更新)attrs文件:

<?xml version="1.0" encoding="UTF-8"?><resources>    <declare-styleable name="AnalogClock">        <attr name="dial" format="reference"/>        <attr name="hand_hour" format="reference"/>        <attr name="hand_minute" format="reference"/>    </declare-styleable>    </resources>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508706.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号