問題タブ [surfaceholder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2911 参照

android - サーフェス ホルダーのカム画像、描画: サーフェス タイプによる例外

テスト アプリでカメラ プレビューを開始するためにSurfaceViewを使用しています。SurfaceHolder

CameraPreview を使用したい (SDK バージョン 7 の SDK サンプルに付属)。UI をクリックすると、写真が撮影されます。Previewクラスは次のとおりです。

}

次に、対応CanvasするSurfaceHolder. したがって、私は電話してcanvas = holder.lockCanvas()います。これにより、IllegalArgumentException次のメッセージが表示されます。

現在、これらのサーフェス タイプは非推奨であるとドキュメントに記載されており、値セットは無視されます。ただし、タイプをこの特定の値に設定した場合、カメラのプレビューのみが機能します。

Canvas撮影しSurfaceViewた写真が表示されている上に描画するにはどうすればよいですか? それとも、別のレイヤー/ビューに配置する必要がありますか?

0 投票する
1 に答える
824 参照

android - 実行中の android.media.MediaPlayer を取得して、アプリケーション内のアクティビティ間で永続化する

アプリケーションの 1 つのアクティビティで開始し、再準備することなくアプリケーションの他のアクティビティにユーザーを追跡するビデオ ストリームを表示しようとしています。アクティビティの変更を少し一時停止しても問題ありませんが、再開するべきではありません。すべてが 1 つのアクティビティで正常に機能していますが、アクティビティを切り替えるMediaPlayerと、 は新しい に接続したくないようですSurfaceHolder。オーディオは美しく機能しますが、ほとんど問題はありません。

SurfaceViewアプリケーションコンテキストで初期化されたサブクラスを介してこれを実行しようとしました。(アクティビティ間でのアプリケーション コンテキスト ビューの再配置は、代わりに などの単純なビューを使用するとうまくいくように見えるButtonので、それは問題ではないと思います。) コンストラクターで、MediaPlayer オブジェクトを作成し、リスナーとデータソース (MP4 ストリーム) を設定します。 HTTP 経由 - はい、MediaPlayer の通常の使用方法で再生できることを確認しました)、および を呼び出しますprepareAsync。私SurfaceHolder.CallbacksurfaceCreatedメソッドではsetDisplay、 and (プレイヤーが準備を終えた場合)を呼び出しますstart。私がsurfaceDestroyed呼び出すメソッドでpause。そして、サーフェスが既に作成されている場合は、準備コールバックで start を呼び出します。

私はこの時点で何をすべきか途方に暮れています。何か案は?

0 投票する
2 に答える
16648 参照

android - SurfaceHolder.lockCanvas()nullを返す

私はゲームを作成していますが、Androidを初めて使用するため、LunarLanderコードの例に基づいてデザインを作成しました。その設計でGameThread.doStart()は、はから呼び出されGameActivity、スレッドは次にGameThread.run()示すようにループからすべてを実行します(わかりやすくするためにコードの多くは削除されています)。

私が遭遇したいくつかの問題を修正するために、以下に示すように、GameActivityの手にもっと制御を入れようとしました:

それを行う場合を除いて、lockCanvas()常にnullが返されるため、画面に何も描画できません。私が言ったように、私はまだAndroidに慣れていないので、2番目のケースが機能しない理由がわかりません。何が起こっているのか、なぜそれが機能しないのか誰もが知っていますか?

編集:私がテストしたものから、表面は決して作成されません。アクティビティの間GameView.onResume()、サーフェスが作成されるのを待ってからゲームを続行しましたが、それは永遠に待ちました。なぜ最初のインスタンスがサーフェスが作成される唯一のケースなのですか?

0 投票する
1 に答える
130 参照

android - キャンバスがトレース Android を認識しなくなる

MotionEvent.ACTION_MOVE を使用して動作するキャンバスを作成しようとしています。ただし、スレッドが開始された後、水平線は正しく描画されますが、他の線は機能しないか、散発的です。イベントをリリースするとすぐに、線が消えます。

[編集]キャンバスがScrollViewにネストされていたためです。

0 投票する
2 に答える
4653 参照

android - サーフェスがフォアグラウンドにない場合、SurfaceHolder.lockCanvasはnullを返します

私は現在、AndroidのLiveWallpaperでテストを行っています。次のようなコードを使用して、キャンバスに何かを描画しています。

この部分は通常の状況では正常に機能しています。ただし、このサービスに対応する設定で設定が変更されるたびにこのコードを実行するリスナーがあります。設定アクティビティからこのコードを実行するたびにNullPointerc.save()メソッドを取得しているようです。

壁紙がフォアグラウンドにない場合にのみ、holder.lockCanvas()のようです。フォアグラウンドにないときにこのサーフェスに描画することは不可能ですか?

0 投票する
1 に答える
1417 参照

java - アンドロイド - SurfaceView。画面をクリアせずに更新します。(注:私はNoobです)

SurfaceView を使用しようとすると、奇妙な問題が発生します。このような、動作しますが、2フレーム間でちらつき続けます*。また、unlockCanvasAndPost には約 30 ~ 50 ミリ秒かかりますが、これは正常ですか?

この場合、毎回すべてを再描画することはお勧めできません。フレームごとに 350 ドットを再描画することはお勧めできません。

* 2 つのフレーム間のちらつき: フレームごとに (X,X) にドットを描画するとします。X はフレーム番号です。ドット 1,1 3,3 5,5 7,7 9,9 がすべての障害フレームに表示され、ドット 2,2 4,4 6,6 8,8 がすべてのペア フレームに表示されます。

描画するコードは次のとおりです。

0 投票する
1 に答える
1721 参照

android - カメラからバッファを介してファイルにビデオを記録することは可能ですか?

特に、これは私が望んでいる設定です: Android デバイスの内蔵カメラはライブ ビデオを記録しています。このビデオは、数秒間のビデオを保持するバッファに保存されています。バッファがいっぱいになると、バッファの最も古いフレームがディスク上のビデオ ファイルに追加され、カメラからの新しいフレーム用のスペースが確保されます。その後、バッファ内のデータを使用して、ビデオを少し後方にスキップできます。

Surface で mediaRecorder (および mediaPlayer?) を使用してそれぞれビデオを取得し、addCallbackBuffer を使用してバッファを作成し、次に setPreviewCallbackWithBuffer を使用してバッファからビデオを表示することを考えていました。そこからどこへ行くべきか、それとも完全に間違った道なのか、私には完全にはわかりません。私はこれでやや初心者です。

0 投票する
7 に答える
69975 参照

java - Androidカメラは動作しません。startPreviewが失敗する

LogCatから次のエラーが発生します。

アクティビティクラスは次のとおりです。

MySurfaceViewクラス:

CameraSurfaceViewクラス:

最後に、MyRenderクラス:

0 投票する
1 に答える
933 参照

android - インテント チューザーがキャンセルされた後にカメラを再度開く

CameraViewを拡張するカスタム カメラ プレビュー ビューを作成し、インターフェイスSurfaceViewも実装していSurfaceHolder.Callbackます。ビューはカメラで動作します。ビューを開くと、カメラのプレビューが表示されます。同じ画面には、「写真を撮る」、「ギャラリーから選択する」という 2 つのボタンを備えたオーバーレイもあります。およびメソッドCameraViewでカメラを解放して再度開くアクティビティを保持します。onPause()onResume()

[ギャラリーから選択] ボタンをクリックすると、次のインテントが作成されます。

このインテントに応答できるアクティビティが 1 つしかない場合は問題ありません。アクティビティが自動的に開かれ、カメラが解放されます。また、ギャラリーにいるときに反撃することもできますCameraView。アクティビティに戻ると、カメラのプレビューが復元されます。

このインテントを処理できるアクティビティが複数ある場合、興味深い部分が始まり、インテント チューザー ダイアログがポップアップします。インテント チューザー ダイアログが生成onPause()され、親アクティビティで呼び出され、カメラが解放されると、画面が黒くなります。ダイアログから意図を選択せず​​、代わりに電話の戻るボタンをクリックするonResume()と呼び出されますが、カメラのプレビューは戻ってきません。カメラ プレビューを再度表示するには、前のアクティビティに戻り、プレビュー アクティビティ内に戻る必要があります。

次の問題は、ダイアログが発生したときにonPause()呼び出されるだけで、実際に別のアクティビティに切り替えると呼び出されるために発生しsurfaceDestroyed()ます。onResume()ダイアログが戻るボタンでキャンセルされ、呼び出されないsurfaceChanged()場合も同様です。surfaceCreated()

私の質問は、インテント チューザー ダイアログがキャンセルされた場合にカメラ プレビューを再表示する方法です。SurfaceHolder.Callbackメソッドを明示的にトリガーする方法はありますか? hideSurface()hiddenとshowSurface()inがあることは知っていますがSurfaceView、このルートには行きたくありません。

0 投票する
0 に答える
248 参照

android - Android テトリスのエラー - getEntry

当時、私と友人は、学校のプロジェクトでクラシック ゲームのテトリスをプログラミングしていました。私はしばらくの間プログラミングをしており、rotate と moveBlock の両方、および newBlock、draw などのメソッドを実装していたので、今が初めて実行するのに最適な時期だと思いました。しかし、その後、エラーメッセージが表示されます:

メソッドを使用して、自己構築されたビュー(surfaceHolder / surfaceView)を使用するスレッドで実行しています。基本的に、教師がヘビゲームをプログラムしたレッスンに従っています。したがって、テトリスで正しいようにメソッドを更新すると機能するはずですが、今ではエラーが表示されません。エラー メッセージの意味を知っている人は、さらに情報が必要な場合は質問を貼り付けてください。

多くの LOG コマンドを追加しましたが、TetrisView (surfaceView) コンストラクターと Thread のコンストラクターから LOG を取得したので、どのメソッド内にもありません。