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

时间:2014-09-05 10:00:35

标签: android eclipse

我是Android编程的新手,任何人都可以告诉我如何将捕获的图像动态添加到水平滚动视图中。示例代码更有帮助。

先谢谢你。

1 个答案:

答案 0 :(得分:0)

添加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>

添加MainActivity

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" />