3

標準的な方法に奇妙な問題がありますcanvas.drawCircle

Android4.0.4を搭載したSamsungGalaxyS3と2.1を搭載した別のS2でまったく同じコードを実行していますが、問題なく動作します。4.0.3を搭載したAcer500タブレットの同じコードは、とを呼び出したときに何もペイントしませdrawCircledrawPath

これはコードです:

    Paint thickLine = new Paint(scalePaint);
    thickLine.setStrokeWidth(0.07f);
    thickLine.setColor(Color.argb(0xff, 0xff, 0x36, 0x33));
    thickLine.setFlags(Paint.ANTI_ALIAS_FLAG);
    canvas.drawLine(0.5f, 0.5f, 0.1f, 0.1f, thickLine);
    canvas.drawCircle(0.5f, 0.5f, 0.15f, thickLine);

しかし、drawLine3つのデバイスすべてで動作します!

また、前述のとおり、コードは以前は機能していましたが、標準のFragmentsをSherlockFragmentsに変更し、アプリのコードをいくつかの場所で変更しました。常にS3でテストしています。ですから、どの段階でAcerで機能しなくなったのかわかりません。

また、(アプリにすべての変更を加える前に)このコードを含む古い変更されていない描画クラスを使用し、Sherlockを使用する新しいバージョンにコピーしました-プロジェクトコードのこの段階でさえ、説明されているように機能しなくなりました。

ですから、それはSherlockと関係があるのではないかと思いますが、どのように、そしてなぜかはわかりません。

誰かが同じような経験をしましdrawLineたが、そうではdrawCircleありdrawPathませんか?-Sherlockの使用の有無にかかわらず

どうもありがとう

4

4 に答える 4

1

私はまったく同じ問題を抱えていました-Canvas.drawCircleは私のために働いていませんでした。幸いなことに、Canvas.drawOvalという別の関数があります。ビルドターゲットを変更せずに円を描くために使用できます。

RectF tmpRect = new RectF();
tmpRect.top = 0;
tmpRect.bottom = diameter;
tmpRect.left = 0;
tmpRect.right = diameter;

//This call will draw nothing
canvas.drawCircle(tmpRect.centerX(), tmpRect.centerY(), tmpRect.width() / 2, selectionPaint);
//This call will draw a circle
canvas.drawOval(tmpRect, selectionPaint);
于 2013-01-14T14:02:06.517 に答える
0

ほとんど信じられないが本当です。ターゲット設定を変更する(または完全に削除する)だけで機能します-私の場合はそうしました:-)

于 2012-11-29T17:59:29.527 に答える
0

Canvas.drawLine()とCanvas.drawRect()でこの問題が発生していました。私の線は描かれますが、私の長方形は描かれませんでした。

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.WHITE);

    int height = canvas.getHeight();
    int width = canvas.getWidth();

    canvas.drawLine(width/2,0,width/2,height,paint);
    canvas.drawLine(0,height/2,width,height/2,paint);

    paint.setStyle(Paint.Style.STROKE);
    paint.setColor(Color.GREEN);
    canvas.drawRect(touchRect, paint);
}

ただし、画面に触れた場所に長方形を描画したかったため、onTouchEvent()メソッドにView.invalidate()を呼び出すと、機能し始めました。

@Override
public boolean onTouchEvent(MotionEvent event) {

    invalidate();

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        float x = event.getX();
        float y = event.getY();

        touchRect.left = (int) (x - 20);
        touchRect.top =(int) (y - 20);
        touchRect.right = (int) (x + 20);
        touchRect.bottom = (int) (y + 20);
    }
    return false;
}

https://developer.android.com/guide/topics/graphics/2d-graphics.htmlを読んでこれを入手しました

于 2013-04-01T08:33:38.467 に答える
0

最小Androidバージョンを2.3から3に変更した後、同じ問題が発生しました。Androidバージョンを元に戻すと、線は機能しましたが、drawRectは機能しませんでした。何度も試行錯誤した結果、上と下の座標を切り替えるとうまくいくことがわかりました。

順序を左上から右下から左下から上に変更しましたが、機能しました。

于 2014-01-31T20:55:04.420 に答える