ホームページ  >  に質問  >  本文

java - SurfaceView绘制出现的问题?

先上两张图压压惊:

如图,带虚拟键的华为手机,图片内容是用SurfaceView画出的背景和一个大圆,一个小圆(转盘),调出虚拟键进入打开正常如下图1,关闭虚拟键如下图2

关闭虚拟键进入打开如下图1,打开虚拟键如下图2

接下来是代码,个人感觉没什么问题

 //初始化盘块绘制的范围
        mRange = new RectF(mPadding, getMeasuredHeight()/2-mRadius/2, mPadding + mRadius, getMeasuredHeight()/2+mRadius/2);
 /**
     * 绘制背景
     */
    private void drawBg() {
        mCanvas.drawColor(Color.TRANSPARENT);
        mCanvas.drawBitmap(mBackgoundBitmap,0,0,null);
        mCanvas.drawBitmap(mBgBitmap, null, new Rect(mPadding/3, (getMeasuredHeight()/2-(getMeasuredWidth()-2*mPadding/3)/2),
                getMeasuredWidth() - mPadding/3,
                (getMeasuredHeight()/2+(getMeasuredWidth()-2*mPadding/3)/2)), null);
    }
 public void draw() {
        try {
            mCanvas = mHolder.lockCanvas();
            if (mCanvas != null) {

                //绘制背景
                drawBg();

                //绘制盘块
                float tmpAngle = mStartAngle;
                float sweepAngle = 360 / mItemCount;
                for (int i = 0; i < mItemCount; i++) {
                    mArcPaint.setColor(mColors[i]);
                    //绘制盘块
                    mCanvas.drawArc(mRange, tmpAngle, sweepAngle, true, mArcPaint);

                    //绘制文本
                    drawText(tmpAngle, sweepAngle, mStrs[i]);
                    //绘制Icon
                    drawIcon(tmpAngle, mImgsBitmap[i]);

                    tmpAngle += sweepAngle;
                }

疑问:draw()方法是只要SurfaceView没被销毁就一直在执行不断重绘的,从图片可以看出,当把虚拟键关闭的时候,drawBg()画背景和大圆盘的方法是执行了的,但是下面画转盘的代码为什么没执行?该如何解决?

黄舟黄舟2763日前459

全員に返信(2)返信します

  • 阿神

    阿神2017-04-18 10:36:25

    mRange オブジェクトは変更されていません。つまり、ターンテーブルの座標が再計算されていません。onDraw メソッドでターンテーブルを初期化するコードを調整し、ディスク ブロックの描画範囲を再計算し、メソッドをカプセル化する必要があります。 .drawBg() メソッドも同じです。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:36:25

    ??????

    返事
    0
  • キャンセル返事