Android 如何将捕获的图像动态添加到水平滚动视图中

Android 如何将捕获的图像动态添加到水平滚动视图中,android,eclipse,Android,Eclipse,我是android编程新手,谁能告诉我如何将捕获的图像动态添加到水平滚动视图中。示例代码更有用 提前感谢。添加xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="matc

我是android编程新手,谁能告诉我如何将捕获的图像动态添加到水平滚动视图中。示例代码更有用

提前感谢。

添加xml

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<RelativeLayout
android:id="@+id/RelativeGridLayout"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >

<GridView
android:id="@+id/gridviewimg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:numColumns="2"
android:scrollbarStyle="outsideInset"
android:smoothScrollbar="true"
android:verticalSpacing="10dp"
android:paddingBottom="50dp"
android:paddingTop="10dp"
/>
</RelativeLayout>

<RelativeLayout
android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_alignBottom="@+id/RelativeGridLayout"
>

<Button
android:id="@+id/capture_btn1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Camera" />
</RelativeLayout>

</RelativeLayout>
外接程序主活动

public class MainActivity extends Activity {
    Button captureBtn = null;
    final int CAMERA_CAPTURE = 1;
    private Uri picUri;
    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private GridView grid;
    private  List<String> listOfImagesPath;

    public static final String GridViewDemo_ImagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/GridViewDemo/";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        captureBtn = (Button)findViewById(R.id.capture_btn1);
        grid = ( GridView) findViewById(R.id.gridviewimg);

        listOfImagesPath = null;
        listOfImagesPath = RetriveCapturedImagePath();
        if(listOfImagesPath!=null){
        grid.setAdapter(new ImageListAdapter(this,listOfImagesPath));
        captureBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try {
                    //use standard intent to capture an image
                    Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    //we will handle the returned data in onActivityResult
                    startActivityForResult(captureIntent, CAMERA_CAPTURE);
                    } catch(ActivityNotFoundException anfe){
                    //display an error message
                    String errorMessage = "Whoops - your device doesn't support capturing images!";

                    }
            }
        });

        }
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
        //user is returning from capturing an image using the camera
        if(requestCode == CAMERA_CAPTURE){
        Bundle extras = data.getExtras();
        Bitmap thePic = extras.getParcelable("data");
        String imgcurTime = dateFormat.format(new Date());
        File imageDirectory = new File(GridViewDemo_ImagePath);
        imageDirectory.mkdirs();
        String _path = GridViewDemo_ImagePath + imgcurTime+".jpg";
        try {
        FileOutputStream out = new FileOutputStream(_path);
        thePic.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.close();
        } catch (FileNotFoundException e) {
        e.getMessage();
        } catch (IOException e) {
        e.printStackTrace();
        }
        listOfImagesPath = null;
        listOfImagesPath = RetriveCapturedImagePath();
        if(listOfImagesPath!=null){
        grid.setAdapter(new ImageListAdapter(this,listOfImagesPath));
        }
        }
        }
        }

        private List<String> RetriveCapturedImagePath() {
        List<String> tFileList = new ArrayList<String>();
        File f = new File(GridViewDemo_ImagePath);
        if (f.exists()) {
        File[] files=f.listFiles();
        Arrays.sort(files);

        for(int i=0; i<files.length; i++){
        File file = files[i];
        if(file.isDirectory())
        continue;
        tFileList.add(file.getPath());
        }
        }
        return tFileList;
        }

        public class ImageListAdapter extends BaseAdapter
        {
        private Context context;
        private List<String> imgPic;
        public ImageListAdapter(Context c, List<String> thePic)
        {
        context = c;
        imgPic = thePic;
        }
        public int getCount() {
        if(imgPic != null)
        return imgPic.size();
        else
        return 0;
        }

        //---returns the ID of an item---
        public Object getItem(int position) {
        return position;
        }

        public long getItemId(int position) {
        return position;
        }

        //---returns an ImageView view---
        public View getView(int position, View convertView, ViewGroup parent)
        {
        ImageView imageView;
        BitmapFactory.Options bfOptions=new BitmapFactory.Options();
        bfOptions.inDither=false;                     //Disable Dithering mode
        bfOptions.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared
        bfOptions.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
        bfOptions.inTempStorage=new byte[32 * 1024];
        if (convertView == null) {
        imageView = new ImageView(context);
        imageView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        imageView.setPadding(0, 0, 0, 0);
        } else {
        imageView = (ImageView) convertView;
        }
        FileInputStream fs = null;
        Bitmap bm;
        try {
        fs = new FileInputStream(new File(imgPic.get(position).toString()));

        if(fs!=null) {
        bm=BitmapFactory.decodeFileDescriptor(fs.getFD(), null, bfOptions);
        imageView.setImageBitmap(bm);
        imageView.setId(position);
        imageView.setLayoutParams(new GridView.LayoutParams(200, 160));
        }
        } catch (IOException e) {
        e.printStackTrace();
        } finally{
        if(fs!=null) {
        try {
        fs.close();
        } catch (IOException e) {
        e.printStackTrace();
        }
        }
        }
        return imageView;
        }
        }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
加载项清单

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

将其添加到要显示水平滚动视图的布局中

<HorizontalScrollView
        android:id="@+id/horizontal_scroll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/ll" >

        <LinearLayout
            android:id="@+id/View_photo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dip"
            android:orientation="horizontal" />
</HorizontalScrollView> 

以您想要的任何方式将您的图像设置为此imageView。最好在AsyncTask中加载图像。

到目前为止您是否尝试过任何方法?只需从相机拍摄照片并使用ArrayList存储图像路径,使用HorizontalListview和Coustem适配器当pic图像在ArrayList中添加图像路径时,在ArrayList中创建或更新您的适配器我也在中执行此操作我的应用使用网格视图时,您的代码可以正常工作,但我需要在水平滚动视图->线性布局中插入这些图片,图像应该显示在线性布局中,方向设置为水平。没有任何水平滚动视图网格视图是垂直滚动的谢谢,当使用网格视图时,您的代码可以正常工作,但我需要在水平滚动视图->线性布局中插入捕获的图片,图像应该显示在线性布局中,方向设置为水平,我们可以在相同的线性布局中插入或显示语音剪辑、图像和涂鸦文件吗???好的,您可以给我发邮件,所以我可以给你发送完整的源代码,jeetendra。gupta21@gmail.com
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:orientation="vertical" >
<ImageView
    android:id="@+id/resultimage"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_margin="10dp"
    android:adjustViewBounds="true"
    android:contentDescription="@string/image_form">
</ImageView>
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    LinearLayoutInHorizontalscrollview.addView(inflater.inflate(R.layout.imagexml, null),lp);
    Images = (Linearlayout) view.getChildAt(i);
    Images.setId(id);//for easy accessibitility
    ImageView =(ImageView)Images.findViewById(R.id.resultimage);