wie setzen backgroundColor einer surfaceview in android?

ich bin mit einer Oberfläche anzeigen, zu zeichnen, interaktive piechart. hier ist mein code, die sieht aus wie alle Oberfläche Beispiele.

class PieChart extends SurfaceView implements SurfaceHolder.Callback {

public PieChart(Context context) {
        super(context);
        //Log.i("PieChart", "PieChart : constructor");
        getHolder().addCallback(this); 
}

@Override
    public void onDraw(Canvas canvas) {
        if (hasData) {

            resetColor();
            try {
                canvas.drawColor(getResources().getColor(R.color.graphbg_color));

                graphDraw(canvas);
            } catch (ValicException ex) {

            }

        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {

        Log.i("PieChart", "surfaceChanged");

    }

    public int callCount = 0;

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

            try {
                //Log.i("PieChart", "surfaceCreated");
                mChartThread = new ChartThread(getHolder(), this);
                mChartThread.setRunning(true);

                if (!mChartThread.isAlive()) {
                    mChartThread.start();
                }

                Rect mFrame = holder.getSurfaceFrame();

                mOvalF = new RectF(0, 0, mFrame.right, mFrame.right);

            } catch (Exception e) {
                //No error message required
            }

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        //Log.i("PieChart", "surfaceDestroyed");
        boolean retry = true;
        callCount = 0;
        mChartThread.setRunning(false);
        while (retry) {
            try {
                mChartThread.join();
                retry = false;
            } catch (InterruptedException e) {
                //No error message required
            }
        }
    }
}

class ChartThread extends Thread {

    private SurfaceHolder mSurfaceHolder;
    private PieChart mPieChart;
    private boolean mRefresh = false;

    public ChartThread(SurfaceHolder surfaceHolder, PieChart pieChart) {
        //Log.i("ChartThread", "ChartThread");
        mSurfaceHolder = surfaceHolder;
        mPieChart = pieChart;
    }

    public void setRunning(boolean Refresh) {
        //Log.i("ChartThread", "setRunning : " + Refresh);
        mRefresh = Refresh;
    }

    @Override
    public void run() {
        Canvas c;
        //Log.i("ChartThread", "run : " + mRefresh);
        while (mRefresh) {
            c = null;
            try {
                c = mSurfaceHolder.lockCanvas(null);
            // c.drawColor(0xFFebf3f5);
                synchronized (mSurfaceHolder) {

                    mPieChart.onDraw(c);

                }
            } catch (Exception ex) {

            } finally {
                //do this in a finally so that if an exception is thrown
                //during the above, we don't leave the Surface in an
                //inconsistent state
                if (c != null) {
                    mSurfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }
    }
}

damit bin ich in der Lage zu zeichnen Kreisdiagramme erfolgreich. aber hier das Problem ist "vor dem laden Kreisdiagramm Schwarzes Rechteck sichtbar ist, für eine zweite, die sich surfaceview Standard-Boden zurück". so möchte ich, um den hintergrund Farbe für Oberfläche anzeigen zu vermeiden, das schwarze Rechteck.

Folgenden ist der geänderte code für das zeichnen von hintergrund-Farbe an die Oberfläche anzuzeigen.

 public PieChart(Context context) {
            super(context);
            //Log.i("PieChart", "PieChart : constructor");
            getHolder().addCallback(this); 
            setBackgroundColor(getResources().getColor(R.color.graphbg_color));
    }


@Override
    public void onDraw(Canvas canvas) {
        if (hasData) {
             setBackgroundColor(getResources().getColor(R.color.graphbg_color));
            resetColor();
            try {
        canvas.drawColor(getResources().getColor(R.color.graphbg_color));

                graphDraw(canvas);
            } catch (ValicException ex) {

            }

        }
    }

mit diesen änderungen, schwarz Rechteck-Problem behoben ist. aber piechart ist nicht richtig erfrischend. kann mir jemand helfen bei der Lösung aller von diesen beiden Themen.

InformationsquelleAutor Raj | 2011-11-12

Schreibe einen Kommentar