次のコードでは、各点に異なる色のグラフを描画します(ここでは重要な色の選択は(...)です)。
これは、変数x、y、zを保持するVectorを変更するonTouchListenerに添付されています。 1つの "onTouch"変更点がupdateView()でビューを更新します。 xを保持するベクトルの大きさは約300要素です。 yを保持する配列は約200です。これにより、onTouchイベントごとにupdateView()メソッド内に200 * 300ループが作成されます。 次のonTouchがトリガーされる前にwaitメソッドを実装しようとしましたが、まだ遅くなっています。Android ImageViewの速度が遅い、簡単な方法はありますか?
アイデア?
public updateView(){
bitmap = Bitmap.createBitmap((int) width, height - nextToCurve.getHeight(),
Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
imageView.setImageBitmap(bitmap);
canvas.drawColor(Color.BLACK);
(...)
//x
for(int i5=start;i5<stop;i++){
//y
for(int i=blockSizeSmall-minBlockSize;i>minBlockSize;i--){
//change color for z
(...)
canvas.drawLine(oldX, oldY, temp3, temp4, paint);
canvas.drawPoint(x,y, paint);
}
imageView.postInvalidate();
}
ARGB_8888は遅いです。各updateViewでやり直す作業量を最小限に抑えてください。たぶん透明なレイヤーで作業して、毎回少ししか変更しないかもしれません。 – njzk2
であり、このアルゴリズムは複雑さO(n^2)を有する。ループのために1つだけを使うようにしてください –
@njzk:不幸にも私はこれをやりません。なぜならそれはgabeを変えるからです。私はそれがO(n^2)であることを認識しています。私が今しようとしているのは10と20ポイントをスキップしてxを10に、yを20に正規化することですが、これは良く見えません。 – user1222353