2012-01-12 2 views
1

Возможно, простой вопрос, но у меня есть активность, которая извлекает растровое изображение (камеры) из папки на SD-карте. Пользовательский вид активности расширяет область просмотра. я хотел бы добавить растровое изображение в представление, а затем отобразить это представление в группу представлений. в итоге будет добавлено несколько просмотров. Каковы наилучшие методы для этого? например, вы бы получили активность, чтобы сначала получить растровое изображение, а затем в файле группы просмотра получить доступ к растровому изображению со следующим.Как добавить растровое изображение в представление, а затем добавить это представление в группу просмотра

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

Битовая карта может быть добавлен к виду, что внутренний изгиб может быть addeded к ViewGroup затем отображается. благодаря

[обновление] активность

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





    } 


} 

вид своей деятельности в И.А. ViewGroup. так что это родительский вид. активность препроцессов растрового изображения, создает и добавляет представления динамически. он также вызывает invalidate в родительской группе просмотра, используя runOnUiThread().

ответ

1

Получите родительский вид, а затем динамически добавьте его в него.

Конечно, деятельность должна была бы выполнить предварительную обработку, а также добавить эти виды в группу представлений. В идеале это должно быть сделано в AsyncTask, так что ваша деятельность может обрабатывать текущую функцию. Когда AsyncTask финиширует, используйте обработчик для обновления представлений/добавления или просто запустите обновление в потоке ui (runOnUIThread (...)).

+0

благодарит за ответ. Я обновил свой пост. это по правым линиям? он не отображает растровое изображение в представлении. спасибо – turtleboy

+0

Похож на меня. – JoxTraex

+0

, так что все представления, которые я добавил в группу просмотра динамически, будут рисовать после вызова invalidate на поток ui? Мне нечего делать в классе viewgroup, например override onDraw? – turtleboy

0

Мне просто нужно было изменить вид на ImageView, и приведенный выше код работал. поэтому я думаю, что совет Джокса правильный. Получите родительскую группу просмотра, а затем динамически добавьте в нее представления. если изображение затем использует изображение.

Смежные вопросы