毎回毎回redrawingBitmapせずにキャンバス内でビットマップを移動するより良い方法はありますか?Androidライブ壁紙 - onOffsetsChanged
答えて
あなたは質問しています:より良い方法がありますか? 答えは:いいえ。シーン全体、背景、すべて、すべてのフレームを再描画する必要があります。 また、一般的に言えば、onOffsetsChangedを描画したくありません。 runnableで使用している変数を更新するだけです。 SDKのCubeサンプルがどのように機能するかを見てみましょう。ジョーイの例も正しい。これが役に立ちますようにお願いします
私は通常、オフセットや位置を変更して位置や画像を読んで変更しているような状況に陥っています。私はonOffsetsChangedを使用して、変更されると自動的に描画ルーチンで更新される定数変数に情報を送ります。あなたはそのように仕事をしたいの定数を定義することによって
スタート...私はonOffsetsChangedイベントからすべての値をキャプチャしています。この例では
Private float mXOffset = 0,
mYOffset = 0,
mXStep = 0,
mYStep = 0,
mXPixels = 0,
mYPixels = 0;
、あなた必要なだけ定義し、オフセットをキャプチャし、ステップ、またはピクセルを使用します。
public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) {
mXOffset = xOffset;
mYOffset = yOffset;
mXStep = xStep;
mYStep = yStep;
mXPixels = xPixels;
mYPixels = yPixels;
DrawStuff();
}
このデータを取得すると、アプリケーションでもう少しパワーと柔軟性を得ることができます。キャンバスの更新を次のように呼び出すことができます。描画ルーチンが呼び出されるたびにオフセットが変更されると、これらの数値を使用して画像の位置、移動速度、またはその他の数学的計算を変更できます。
private void DrawStuff(){
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
c.drawBitmap(this.ImageI, mXPixels,mYPixels + mYOffset,null);
c.drawBitmap(this.ImageII, xPixels, 0, paint);
}
} finally {
if (c != null) holder.unlockCanvasAndPost(c);
}
}
···など。これが私が完全にはっきりしていないことをあなたが求めていたものだと願っています。これにより、必要に応じて、これらのオフセット、ステップ、および場所を他の場所で使用することもできます。
ビットマップを再読み込みして再描画することなく、画像を画面上で変換するより良い方法はありませんか?私のスレッドは毎分実行されており、ドローではたくさんのことがあります。ありがとうございました:) – Misca
は、実際にビットマップにロードしていないと指定したコードに、あなたがロードしたビットマップを参照しているだけです。 c.drawBitmapを使うと、上記のビットマップをキャンバスに適用するだけです。だから、正確に何を達成しようとしているかによっては、プロセッサーについてあまり心配することなくこれらのイメージを簡単に操作できるはずです。しばしばあなたが作業するビットマップを処理するための小さな配列を別のイメージを呼び出している場合。 – Joey
- 1. Androidライブ壁紙
- 2. Androidライブ壁紙
- 3. ライブ壁紙android xml
- 4. Androidライブ壁紙+スプライトアニメーション
- 5. Androidライブ壁紙フェード効果
- 6. Androidライブ壁紙タッチイベント階層
- 7. Androidのライブ壁紙 - キャンバス
- 8. Androidライブ壁紙の質問
- 9. ライブ壁紙Androidのアニメーション?
- 10. Androidライブ壁紙 - Force Portrait
- 11. ライブ壁紙プレビューモード
- 12. ライブ壁紙プレビューサムネイルサイズ
- 13. 現在の壁紙に基づくAndroidライブ壁紙
- 14. Android - ライブ壁紙の選択中にライブ壁紙の設定を変更する
- 15. MainActivityとライブ壁紙
- 16. ライブ壁紙を移動するライブ壁紙
- 17. Android:ライブ壁紙アプリケーションのパフォーマンス 'hickups'
- 18. Androidでライブ壁紙のPNG圧縮
- 19. Androidでのアクティビティ/ライブ壁紙の通信
- 20. Androidライブ壁紙が空白の場合
- 21. Android:ライブ壁紙を復元する
- 22. 別のライブ壁紙を設定すると、Androidデバイスでライブ壁紙が変更されない
- 23. ライブ壁紙のアクセス設定
- 24. ライブ壁紙の動的テキスト
- 25. ライブ壁紙ウォーターリップル効果
- 26. 検出ライブ壁紙ピッカーの「壁紙を設定」ボタンをクリック
- 27. Android壁紙アニメーション
- 28. アプリケーション内のライブ壁紙を電話
- 29. ライブ壁紙にビットマップを配置する
- 30. ライブ壁紙環境設定の問題
私は理解します。どうもありがとうございました!これらの魔女はあなたがonOffsetChangedを呼び出すほうがいいと思いますか? drawFrame();またはmHandler.postDelayed(mDrawWall、30); ??私は本当にフレームレートが気に入らない。 – Misca
@Misca onOffsetsChangedに描画呼び出しを入れる必要はありません(Cubeの例ではdrawFrame()の呼び出しは実際に余計です)。あなたの実行可能ファイルの次の「スケジュールされた」呼び出しは、共有変数で変更した値を使用して「自動的に」開始されます。選択したフレームレートを実行可能モジュールの本体に設定します。そこで、それ以降の呼び出しをスケジュールします。 –
はい、私のスレッドでは10秒のスケジュールを使用します。 onOffsetChangedで30 milisをスケジュールする必要がありますか? – Misca