2012-01-12 16 views
1

多分簡単な質問ですが、私はsdcardのフォルダからビットマップ(camerashot)を取得するアクティビティを持っています。アクティビティのカスタムビューは、ビューグループを拡張します。私はビットマップをビューに追加してから、そのビューをビューグループに追加して表示したいと思います。最終的には、このように複数のビューが追加されます。これのベストプラクティスは何ですか?たとえば、まずビットマップを取得するためのアクティビティを取得し、次にviewgroupファイル内でそのビットマップに次のコードをアクセスします。ビットマップをビューに追加してビューグループにビューを追加する方法

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()); 





    } 


} 

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

答えて

1

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

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

+0

返信ありがとうございます。私は私のポストを更新しました。これは正しい線に沿ったものですか?ビューにビットマップが表示されません。ありがとう – turtleboy

+0

私には正しいと思われる。 – JoxTraex

+0

ビューグループに動的に追加したすべてのビューは、uiスレッドで無効にする呼び出しの後に自分自身を描画しますか?オーバーライドonDrawのように、私はviewgroupクラスで何もする必要はありませんか? – turtleboy

0

ビューをImageViewに変更するだけで、上記のコードが機能しました。だから私はジョックスのアドバイスが正しいと思う....親ビューグループを取得し、動的にそれにビューを追加します。イメージの場合はイメージビューを使用します。

関連する問題