問題タブ [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.
android - AndroidでsurfaceViewコールバックがsurfaceChangedを呼び出すときに一貫性のないディメンション
SurfaceViewを使用して画面の一部に描画しています。これにより、背景スレッドで描画を更新します。surfaceviewは、SurfaceView.callbackを実装します。
onDrawメソッドでは、canvas.drawpont(x、y、paint)を使用して、キャンバスのほぼ全体をピクセルごとに描画するため、大画面ではかなり集中的に使用できます。とにかく、ランドスケープとリバースランドスケープの間で電話をすばやく回転させると、illegalArgumentExceptionが発生します。次のように:
そして、313のSpecGugaeupdateで、私は次のことを行っています。
mHolderは私のSurfaceHolderです。そしてもちろん、onDrawを呼び出す前にキャンバスをロックしました。
このメソッドは、すべての方向にゆっくりと回転させると問題なく機能しますが、2つのランドスケープ状態の間ですばやく180度回転すると、このillegalArgumentExceptionがトリガーされます。surfaceChangedで幅と高さを監視していると、すばやく回転すると、横向きの幅と縦向きの高さが対になっていることに気付きました。たとえば、私の電話(Motorola atrix)では、縦向きの場合は540x307(WidthxHeight)、横向きの場合は960x172のSurfaceViewのサイズです。これは、横向きと逆向きの横向きの間をすばやく回転するとどうなるかです。
ゆっくりと横向きに回転します。
すばやく回転して風景を反転させます。変更されたサーフェスは2回呼び出されます。
onMeasureをオーバーライドしようとしましたが、幅と高さはSurfaceChangedのものと同じです。ですから、準備が整っていないキャンバスに描画しようとしているようですが、ホルダーにロックできるように十分に準備ができています。お時間をいただきありがとうございます。
さらに、破壊された表面では、次のようにスレッドを処理しています。
これにより、スレッドはonDrawを実行できなくなります。
java - Android:surfaceViewはonCreate()でgetHolder()を取得できず、onResume()である必要があります
私の活動では、いくつかの見解とがありsurfaceView
ます。
これが私の最初のコードですonCreate()
上記のコードを取り込んsurfaceView
で変更getHolder()
した場合onResume()
(この結果を得るために何度も試しました)、エラーはありません:
説明してください。
android - Android : holder.getSurface() は常に null を返します
私のビューは、通常のウィジェットとサーフェスビューの集まりです。surfaceholder
SurfaceViewを取得getSurface()
してホルダーで再度使用すると、常に null が返される理由がわかりません。
ここに私のコード例があります:
getSurface()
メソッドのAndroidドキュメントを見ると。これはそれが言う方法です:
表面オブジェクトへの直接アクセス。サーフェスは常に利用できるとは限りません。たとえば、SurfaceView を使用する場合、ビューがウィンドウ マネージャにアタッチされ、サーフェスの寸法と画面位置を決定するためにレイアウトが実行されるまで、ホルダーのサーフェスは作成されません。したがって、通常は、Surface がいつ使用可能になるかを調べるために Callback.surfaceCreated を実装する必要があります。
私はこれをあまり理解していませんが、何かが欠けていることは知っています。私のために説明し、Callback.surfaceCreated
手段とそれを実装する方法を教えてください。
ありがとう :)
android - Android カスタム SurfaceView のサイズを変更する
Android アプリ用の 2D ゲーム エンジンを作成しようとしています。全画面表示の作成には問題なく機能するこのチュートリアルに従いましたが、それは望ましくありません。画面の上部 2/3 (または何でも) をビューに表示し、下部 3 分の 1 を標準の Android ウィジェット (ボタン、テキスト入力など) で埋めたいと考えています。これを機能させることはできません。私が得ることができる最高のものは、空白の白い画面です。外側の LinerLayout の使用、ネストされた RelativeLayout 内へのカスタム SurfaceView の埋め込み、ネストされた LinearLayout への Android ウィジェットの配置など、多くの順列を試しましたが、うまくいきません。
たとえば、50% の SurfaceView、TextView の場合は 50% である必要があると感じたときに、これは白い画面を生成します。
activity_main.xml:
MainActivity.java:
何か案は?
android - Android カメラ - アプリが NULL サーフェスを渡されました
cam_thread を実行するたびに、「app pass NULL surface」というエラーが表示されます。このコードは、HTC Incredible 1 で動作すると思われます。droid x で実行するように少し再構成しました。ただし、まだこのエラーが発生します。
メインスレッド
Cam_Thread
マニフェスト
この元のコードはオロス博士によって書かれました。 http://www.cogsci.uci.edu/~noros/android_car.html
android - カスタム カメラ レコーダー アプリの作成方法
カスタムカメラビデオレコーダーを開発しようとしています。デバイスが Activity の beginRecording() で start MediaRecorder メソッドを実行すると、アプリがクラッシュします。Google API Guideに従っているため、何が問題なのかわかりません。私のデバイスは Android 2.3 以降のバージョンを使用しています。私の Nexus S 4.1.1 では正常に実行されますが、私の Xperia 2.3.3 では実行されず、このトレースが表示されます。
私のコードは次のとおりです。
トレース エラーは次のとおりです。
アップデート:
このエラーを修正しました。主なコードは次のとおりです。
しかし今、私は別の問題を抱えています。このバージョンでは次の行をサポートできないため、2.2 および 2.3.3 バージョンのデバイスにアプリをインストールしたとき: mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); コードを CamcorderProfile.QUALITY_LOW に変更すると、デバイスは最低レベルの品質で記録されます。
そして、これを行う 2.2 および 2.3 バージョンのコードを変更する必要があります。
Android API で setProfile() メソッドが 2.2 で利用可能であり、デバイスがサポート可能なより高い品質で記録する必要があるのに、なぜこれを行う必要があるのでしょうか?
更新 2:
initCamera メソッドで、次のように変更しました。
2.3 バージョンのデバイスでは、次の行を使用して解像度のビデオ構成を検出できます。 mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); ただし、HTC Desire などの一部のデバイスでは、この構成がサポートされていません。
2.2 バージョンの場合、AAC オーディオ エンコーダーを受け入れることができますか?, 私の HTC レジェントはこのオーディオ エンコーダーをサポートしていないため?? UPDATE3: Android 2.2 バージョンは ACC オーディオ エンコーダーをサポートできません。
android - SurfaceView + Canvas、ある色から別の色にフェード
私は持っている
SurfaceView + Canvas メソッドを使用して、リスト内のある色から別の色にフェードしたいと考えています。これが私の試みです:
これはそのまま機能し、最初の色から 2 番目の色、2 番目の色、3 番目の色へとフェードしていくはずだと思います。以上。(私は別のデータもテストしました)。SurfaceView を使用するのはこれが初めてなので、キャンバス メソッドの実行方法が正しいかどうかはわかりません。Log.d を使用して、内側の for ループ (前に「if」ステートメントがあるループ) の 1 つに入ると、その for ループを離れないことがわかりました....これは私には意味がありませんしかし、キャンバスとホルダーに関係があると思います。ヘルプ?
android - Android でのゲームループの作成
ユーザーが画面をクリックすると、このアプリケーションで GameLoop に関連するアプリケーションを作成しています。画面に画像が描画され、画面上をランダムな速度でランダムな方向に移動します。コードにエラーはありませんが、そのアプリケーションを実行しようとすると、強制終了エラーが発生しました..
これは私のソースコードです:
ソースコード:GameLoop.java
ソースコード:Sview.java
ソースコード:ViewThread.java
ソースコード:elements.java
私が得ているエラーは次のとおりです。
前もって感謝します...
android - AndroidのSurfaceViewでバイト配列をレンダリングする
こんにちは私はバイト配列として保存する画像の生のダンプを持っています私はこれを表面ビューに表示する必要があります。このバイト配列を可変ビットマップに変換してサーフェスホルダーのキャンバスにレンダリングしようとしましたが、「drawBitmap」関数が呼び出されると、このnullポインター例外が発生します。
BlockquoteE / AndroidRuntime(28358):致命的な例外:メインE / AndroidRuntime(28358):java.lang.NullPointerException E / AndroidRuntime(28358):android.graphics.Canvas.throwIfRecycled(Canvas.java:1025)E / AndroidRuntime(28358) ):android.graphics.Canvas.drawBitmap(Canvas.java:1065)Blockquoteで
これは私がバイト配列をレンダリングしようとする方法です
android - java.io.IOException: setDataSource が失敗しました: status=0x80000000
次を使用して、アクティビティでメディアプレーヤーを使用してURLを再生しようとしています:
それはうまくいっています。でライブ壁紙として設定するために使用するのと同じコード@onSurfaceCreated
でWallpaperService
、次のエラーログが表示されます
ローカル ビデオ URI を使用してライブ壁紙を設定すると、正常に動作します。
ここでアイデア/提案はありますか?