如何将位图添加到视图中,然后将该视图添加到视图组中



也许这是一个简单的问题,但我有一个活动从SD卡上的文件夹中检索位图(camerashot)。活动的自定义视图扩展了viewgroup。我想将位图添加到视图中,然后将该视图添加到视图组中,然后显示。最终将以这种方式添加多个视图。这方面的最佳实践是什么?例如,您会让活动先获取位图,然后在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());


     }

}

活动的视图是一个视图组。这就是父视图。该活动对位图进行预处理,动态创建和添加视图。它还使用runOnUiThread()对父视图组调用invalidate。

获取父视图,然后动态地将视图附加到其中。

当然,活动必须进行预处理,并将这些视图附加到视图组中。理想情况下,这应该在AsyncTask中完成,这样您的活动就可以处理其当前功能。当AsyncTask结束时,使用处理程序更新视图/追加,或者只在ui线程上运行更新(runOnUIThread(…))。

我只需要将视图更改为ImageView,上面的代码就成功了。所以我认为乔的建议是正确的。。。。获取父Viewgroup,然后向其中动态添加视图。如果是图像,则使用imageview。

最新更新