Как добавить растровое изображение в представление, а затем добавить это представление в группу просмотра - PullRequest
1 голос
/ 13 января 2012

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

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

Растровое изображение можно добавить к представлению, которое можно добавить в inturnгруппа просмотра затем отображается.спасибо

[обновление] действия

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





     }


}

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

Ответы [ 2 ]

1 голос
/ 13 января 2012

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

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

0 голосов
/ 16 января 2012

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

...