1

簡単な質問かもしれませんが、SDカード上のフォルダーからビットマップ(カメラショット)を取得するアクティビティがあります。アクティビティのカスタムビューは、ビューグループを拡張します。ビットマップをビューに追加してから、そのビューをビューグループに追加してから表示したいと思います。最終的には、この方法で複数のビューが追加されます。これのベストプラクティスは何ですか?たとえば、最初にビットマップを取得するアクティビティを取得してから、ビューグループファイルで次の方法でそのビットマップにアクセスします。

bitmap bm = (ActivityName()getContext()).methodToGetBitmap();

ビットマップをビューに追加して、ビューグループに追加して表示することができます。ありがとう

[更新]アクティビティ

public class HorizontalPagerActivity extends Activity {


    private static final String TAG = "*********hpActivity";
    private Context mContext = this;
    File tempFile;
    byte [] imageArray;
    private Bitmap b = null;

     @Override 
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);



            setContentView(R.layout.hpview);
            final ViewGroup viewgroup = (ViewGroup)findViewById(R.id.hpview); 




            tempFile = new File(Environment.getExternalStorageDirectory().
                    getAbsolutePath() + "/"+"image.jpeg");

            imageArray = new byte[(int)tempFile.length()];





         try{

                InputStream is = new FileInputStream(tempFile);
                BufferedInputStream bis = new BufferedInputStream(is);
                DataInputStream dis = new DataInputStream(bis);


                int i = 0;

                while (dis.available() > 0 ) {
                imageArray[i] = dis.readByte();
                i++;
                }

                dis.close();


           } catch (Exception e) {

                   e.printStackTrace();
                }



           Bitmap bm = BitmapFactory.decodeByteArray(imageArray, 0, imageArray.length);
          // Bitmap b = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888);
           b = bm.copy(bm.getConfig(), true);

            if(b == null){
                Log.e(TAG, "b = null");
            }else{
                Log.e(TAG, "b =  not null");
            }






             Canvas canvas = new Canvas(b);
             Log.e(TAG, "canvas created");




             View view = new View(this);
             Log.e(TAG, "view created");
             LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.FILL_PARENT);
                view.setLayoutParams(lp);
                view.draw(canvas);


             viewgroup.addView(view);
             Log.e(TAG, "view added to viewgroup");


             runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    viewgroup.postInvalidate();
                }
            });

             Log.e(TAG, " inval called on viewgroup");

             Log.e(TAG, "no of chidren = "+viewgroup.getChildCount());





     }


}

アクティビティのビューはビューグループです。これが親ビューです。アクティビティはビットマップを前処理し、ビューを動的に作成および追加します。また、runOnUiThread()を使用して親ビューグループでinvalidateを呼び出します。

4

2 に答える 2

1

親ビューを取得してから、動的にビューを追加します。

もちろん、アクティビティは前処理を実行し、それらのビューをビューグループに追加する必要があります。理想的には、これはAsyncTaskで実行して、アクティビティが現在の機能を処理できるようにする必要があります。AsyncTaskが終了したら、ハンドラーを使用してビュー/追加を更新するか、UIスレッドで更新を実行します(runOnUIThread(...))。

于 2012-01-12T22:46:38.340 に答える
0

ビューをImageViewに変更する必要があり、上記のコードは機能しました。したがって、Joxのアドバイスは正しいと思います。親のビューグループを取得してから、動的にビューを追加します。画像の場合は、imageviewを使用します。

于 2012-01-16T13:55:38.273 に答える