問題タブ [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 - SurfaceViewのクラッシュを使用するカメラアプリケーション
SurfaceCreatedのsetPreviewDisplay(holder)でアプリケーションがクラッシュし(何かが始まる前に、強制的に閉じてからアプリを終了する必要があるダイアログが表示されます)、その理由がわかりません。お知らせ下さい。以下は私のコードです。
android - AndroidでSurfaceViewの背景色を設定する
私はAndroid用のペイントアプリケーションを構築しています。SDKで提供されるFingerPaintアプリケーションサンプルを拡張します。ただし、FingerPaintとは異なり、サーフェスに描画するために別のレンダリングスレッドでSurfaceViewを使用しています。これはすべて非常に標準的で簡単です。うまく機能しています。ただ、塗装面に白い背景を付けたいので、まるで白い紙に描いているような感じです。デフォルトの背景は黒色です。サーフェスビューのスレッドは、ビューのonDraw()メソッドを呼び出します。
ここで直面している問題は、SurfaceViewに背景色または背景リソースを設定すると、次回ビューがレンダリングされるときに、この背景がサーフェスの以前の描画を上書きすることです。これを例で説明します。
背景を白色に設定したとします。これで、アプリケーションが起動し、SurfaceViewの色が白になります。わかりました、これまでのところ良いです。今、私は指でこの表面に赤い色の線を描きます。これで、線が白い表面に表示されます。良い。さて、これは絵付けアプリのはずで、車を描きたいとしましょう。そこで、2本目の赤い線を指で描きます。画面に2本目の線が引かれていますが、先ほど描いた1本目の線が消えてしまいます。つまり、SurfaceViewに背景を設定したため、背景が再度描画され、描画された最初の線が上書きされます。これで、画面には2番目に描かれた線だけが表示されます。
明らかに、私はこれが起こらないようにしたいと思います。背景を変更しようとしない場合、コードは完全に機能します(つまり、両方の線がデフォルトの黒い背景に表示され、背景は効果的に表示されません)。しかし、私がいくつかの望ましい背景を設定すると、このことが起こります。毎回描かれるわけではない、どういうわけか静的な背景を持つ方法はありますか?背景を一度だけ描画したいのですが、それ以降の描画はすべてこの背景で行う必要があります。私は、Androidランタイムがビューを描画するたびに背景を描画することを望まないため、以前のレンダリングから、そのビューに存在するすべての描画を上書きします。これを回避する方法はありますか?
これを達成するために私が試したことは次のとおりです。
XMLでandroid:backgroundを使用してSurfaceViewの背景色を設定します。
スタイルの概念を使用して、上記を実行します。(スタイル値を指定し、レイアウトファイルで参照します)。スタイルは、背景色を#FFFFFFFF(白)として定義するだけです。
2のスタイルをSurfaceView(RelativeLayout)の親ビューに設定します。
マニフェストファイルでandroid:themeを使用して、アプリケーション全体に2のスタイルをテーマとして設定します。
SurfaceViewの背景描画可能ファイルを無地の白色の画像に設定します。
コードからSurfaceViewのsetBackgroundColorをthis.setBackgroundColor(Color.WHITE)として呼び出します。
ありがとう。
android - SURFACE_TYPE_NORMAL は有効な Android カメラ タイプですか?
カメラからフレームを取得し、いくつかの画像処理技術を使用してそれらをフィルター処理し、カメラ プレビューの代わりにユーザーに表示する拡張現実アプリを構築しています。
私が最初に始めたとき、私は単に電話していました:
コールバック内で次のことを行います。
これはかなりうまく機能し、Motorola Photon でまともなパフォーマンスを発揮していました。
Motorola Droid と LG Optimus も所有しています。これら 2 つのデバイスでは、 onPreviewFrameが呼び出されることはなく、その結果、所有者がコールバックで描画されることはありませんでした。そして、ユーザーは黒い画面で立ち往生します。
周りを検索した後、次の行を追加する必要があることがわかりました
この行で、最終的にコールバックを取得します。holder.lockCanvas()
しかし問題は、これは では許可されていないため、呼び出そうとするとエラーが発生することSURFACE_TYPE_PUSH_BUFFERS
です。
ImageView
を の上に配置し、代わりに にSurfaceView
フレームを描画することで、これを回避できるようになりました。ImageView
しかし、これのパフォーマンスは、 を使用する場合と比較してひどいものSURFACE_TYPE_NORMAL
です。
私の質問は次のとおりです。
SURFACE_TYPE_NORMAL
有効な使用可能なタイプですか、それとも信頼できるのはですかSURFACE_TYPE_PUSH_BUFFERS
?- もしそうなら、デバイスがサポートしているかどうかを判断して、サポートしているデバイス
SURFACE_TYPE_NORMAL
から余分なパフォーマンスを絞り出すことはできますか? 特定の Android バージョン、またはそれをサポートするメーカーはありますか?
補足として、Honeycomb (3.0) ではこれらの値がサポートされなくなったことを理解しています。ただし、2.3 以下では必須です。また、ICS (4.0) の場合、新しいSurfaceTexture
パイプラインは非常に高速です。しかし、少なくとも 2.2 と 2.3 は引き続きサポートしたいと考えています。
android - BroadcastReceiver を拡張するクラスでサーフェス ホルダーを使用してカメラを開く方法
私のクラスは、broadcastReceiver を拡張します。ICS でトーチをオンにしたいのですが、それはサーフェスビューを持っている場合にのみ可能です。トーチをオンにできるウィジェットを作成するにはどうすればよいですか!ありがとう!このコードは正しくありません!初心者の私を助けてくださいアンドロイド!
public void onReceive(Context context, Intent インテント) { RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.camera_widget);
android - .setPreviewDisplay(holder) が null ポインター例外をスローする
私はカスタム カメラ アプリケーションを開発しています。以下は私の Activity クラスです。
以下は私のmain.xmlです
そして、これは私の CameraPreview クラスです
ここ
コードがヌルポインタ例外をスローしています...それを修正できません.なぜ例外がスローされているのか、どうすれば修正できますか?
android - スケーリングされた SurfaceView で補間方法を変更する
setFixedSize()
ビューを低解像度でレンダリングしてから、 のメソッドを使用してビューの実際のサイズに合わせて拡大することができますSurfaceHolder
。ただし、スケーリングはある種の補間で行われるため、すべてがぼやけます。補間方法を最近傍
に変更する方法、または単にオフにする方法はありますか?
以下は、フルスクリーン ビューで 4x4 サーフェスを使用して作成した例
です。 4x4 キャンバスはフルスクリーンに拡大されます。
誰かが興味を持っている場合に適切な画像を生成するためのサンプル コード:
注:上記の正方形のパターンは、回避したい効果の一例にすぎません。任意のコンテンツを含む任意のビュー (サーフェスホルダーを使用) に適用できる一般的なソリューションを探しています。
android - すべてのビューを 1 つに保持する方法は?
レイアウト内のすべてのビューをそのレイアウトの別の場所に移動する必要があります...だから、すべてのビューをそこに入れ、それだけを移動するものが必要です...どうすればこれを管理できますか? (簡単すぎるかもしれません。申し訳ありませんが、私はAndroidでかなり新しいです。「ホルダー」のようなものを聞いたことがありますが、それで移動できるかどうかはわかりません
助けてくれてありがとう!
すべてのビューを別の RelativeLayout に配置しましたが、ビューが表示されませんか?
xml ファイル:
android - SurfaceHolder.setType は非推奨です...しかし必須ですか?
void android.view.SurfaceHolder.setType(int型)
public abstract void setType (int型) 以降: APIレベル1
このメソッドは非推奨です。これは無視され、この値は必要に応じて自動的に設定されます。
サーフェスのタイプを設定します。
http://developer.android.com/reference/android/view/SurfaceHolder.html
自動的に設定されると表示されていますが、それがないとビデオが再生されません。何が起きてる?代わりになるものはありますか?Android でビデオを正しく再生するのに時間がかかっています。
android - 写真を撮った後、camera.startPreview で surfaceHolder を再利用するにはどうすればよいですか?
解決済み : この問題は Android カメラまたは SDK とは関係ありませんが、カメラとサーフェスの両方の準備ができているかどうかを判断する独自のロジックです。
アクティビティのレイアウト xml に存在する SurfaceView を持っている状況があります。この xml にコールバックを追加して、surfaceHolder がアプリケーションのカメラ プレビュー ウィンドウとして機能する準備が整ったことを知ることができます。この部分は問題なく動作します。プレビュー ウィンドウが表示され、通常のカメラ関連のメソッドとコールバックをすべて使用して、画像を取得および保存できます。
問題は、ユーザーが写真を撮った後、撮影したばかりの写真のプレビューウィンドウを最初に開かずにすぐに別の写真を撮ることができるボタンが表示されることです...これが私の問題です! 作成済みの surfaceHolder インスタンスを使用して camera.startPreview をもう一度呼び出そうとすると、プレビューが表示されません。
同じ surfaceHolder を再利用するにはどうすればよいですか? surfaceView に強制的に現在のホルダーを破棄して再作成させる方法はありますか?
java - 要素がリストに追加されると Android アプリケーションがクラッシュする
私はそのように定義された要素のリストを持っています:
画面上のボタンが押されると、次のように実行します。
これにより、newBullet 要素のプロパティが変更され、そのコピーが箇条書きリストに追加されます。ただし、それを行うと、アプリケーションがクラッシュします。
ここのスレッド部分:
例外を生成し、プログラムを閉じます。既に生成された要素をリストに追加するとプログラムがクラッシュする理由がわかりません。どんな助けでも大歓迎です。
-ネイサン