-1
十萬我試圖使http://arapaho.nsuok.edu/~deckar01/Zvis.html使用畫布繪製Rects
一個原生的Android版本,所以,我做了一個自定義的視圖,吸引所需的所有方塊。當然,一旦數字變得足夠大,Canvas開始繪製上千個方塊,這個繪圖就會花上10秒。
有沒有更好的方法來做到這一點?似乎有一些顯而易見的東西我沒有想到做/使用。
視圖的onDraw方法如下,以防有所幫助。有任何想法嗎?
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
final int number = mNumber;
final float tileWidth, tileHeight;
/*mTileWidth = mWW/(number - 1);
mTileHeight = mHH/(number - 1);*/
// make them squares
if (mWW <= mHH) {
tileWidth = tileHeight = mWW/(number - 1);
} else {
tileWidth = tileHeight = mHH/(number - 1);
}
mWhiteTextPaint.setTextSize(48f/72 * tileWidth);
mBlackTextPaint.setTextSize(48f/72 * tileWidth);
float currX = getPaddingLeft();
float currY = getPaddingTop();
for (int i = 1; i <= number - 1; i++) {
mBackgroundPaint.setColor(getBackgroundColor(i, number));
canvas.drawRect(currX, currY, currX + tileWidth,
currY + tileHeight,
mBackgroundPaint);
final String text = String.valueOf(i);
canvas.drawText(text,
currX + tileWidth/2 - mWhiteTextPaint.measureText(text)/2,
currY + tileHeight * 0.9f, mWhiteTextPaint);
currX += tileWidth;
}
currX = getPaddingLeft();
currY += tileHeight;
for (int i = 2; i <= number - 1; i++) {
for (int j = 1; j <= number - 1; j++) {
final int num = (j == 1) ? i : (i * j) % number;
mBackgroundPaint.setColor(getBackgroundColor(num, number));
canvas.drawRect(currX, currY, currX + tileWidth,
currY + tileHeight,
mBackgroundPaint);
final String text = String.valueOf(num);
if (num == 0) {
canvas.drawText(text,
currX + tileWidth/2 - mBlackTextPaint.measureText(text)/2,
currY + tileHeight * 0.9f, mBlackTextPaint);
} else {
canvas.drawText(text,
currX + tileWidth/2 - mWhiteTextPaint.measureText(text)/2,
currY + tileHeight * 0.9f, mWhiteTextPaint);
}
currX += tileWidth;
}
currX = getPaddingLeft();
currY += tileHeight;
}
if (mOnDrawFinishedListener != null) {
mOnDrawFinishedListener.onDrawFinished(number);
}
}
http://developer.android.com/training/custom-views/optimizing-view.html#accelerate – CarCzar 2014-09-05 18:36:12
@CarCzar我試着把setLayerType(View.LAYER_TYPE_HARDWARE,null);在我的視圖的構造函數中;它並沒有明顯的幫助。 – 2014-09-05 18:37:10
您應該在另一個線程中運行您的繪圖代碼。我知道有一些方法可以實現這一目標,但不知道當前的名稱。通過API搜索,我相信你會找到它。 – CarCzar 2014-09-05 18:42:12