0

SurfaceHolder.Callback を実装する場合、いくつかのオンライン チュートリアルが示唆しています (実際、これは Google が API デモで書いたものであることがわかりました)。

    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        Parameters params = camera.getParameters();
        params.setPreviewSize(width, height);
        camera.setParameters(params);
        camera.startPreview();
    }

ただし、これは実用的ではありません。camera.setParameter(params)実際のデバイスと同様に、指定された高さと幅がデバイスでサポートされていない可能性が高いため、このようなコードは で例外を発生させる可能性があります。

stackoverflow に関する Q&A をいくつか読んだ後、それが正しくない理由がわかりました。それらの投稿は、画面に最適なものを見つける必要があると述べています. 次に、params.getSupportedPreviewSizes();. 電話の向きに関係なく、これらを取得しました。

 h:720  , w:1280 
 h:480  , w:800  
 h:480  , w:720  
 h:480  , w:640  
 h:432  , w:576  
 h:320  , w:480  
 h:240  , w:400  
 h:288  , w:384  
 h:288  , w:352  
 h:240  , w:320  
 h:272  , w:272  
 h:240  , w:240  
 h:160  , w:240  
 h:144  , w:176  

結局のところ、画面に最適な寸法を見つける方法についての手がかりがありません。そして、私は今、正しいプログラムが何であるかについて非常に混乱しています。私は、このプログラムは非常に一般的であるべきだと思います。

誰かが私を助けて、よく書かれたpublic void surfaceChangedサンプルをここに投稿できますか?

ありがとうございました!

4

1 に答える 1

0

私が知っているのは、コールバックに引数として渡される幅と高さが、実行時に計算された SurfaceHolder のものであることだけです。したがって、例外が発生する可能性はほとんどありません。

于 2011-01-22T19:08:27.147 に答える