• android相机开发之仿米格宝宝日志的相机


    功能说明:  因为项目中需要用到多次拍照并保存的功能,模仿了米格宝宝的相机。

    效果图:

     

    图在手机上打开是有画面出来,不是截图上的黑屏的。真机测试就可以了。

     

    这个是拍照后的查看图片的。

    源码如下:

                  

    package com.wjh.camera;
    
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import android.R.integer;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.PixelFormat;
    import android.hardware.Camera;
    import android.hardware.Camera.AutoFocusCallback;
    import android.hardware.Camera.PictureCallback;
    import android.os.Bundle;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.KeyEvent;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    
    /**
     * 
     * 相机
     *
     */
    public class TakePhotoActivity extends Activity implements Callback, OnClickListener, AutoFocusCallback{
    	SurfaceView mySurfaceView;//surfaceView声明  
        SurfaceHolder holder;//surfaceHolder声明  
        Camera myCamera;//相机声明  
        String filePath="/sdcard/";//照片保存路径  
        boolean isClicked = false;//是否点击标识  
        ImageView takeCameraBtn,takephoto_text;
        RelativeLayout re_take_btn,save_btn; //确定
        public static boolean saveFlag = false;// 用于判断是否保存图片的标志
        byte[] imgdata =null;
        public static int imgsize = 0;
        //创建jpeg图片回调数据对象  
        PictureCallback jpeg = new PictureCallback() {  
              
            @Override  
            public void onPictureTaken(byte[] data, Camera camera) {  
                imgdata = data;
               /* try  
                {// 获得图片  
                Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);  
                File file = new File(filePath+"id_"+"1"+".jpg");  
                BufferedOutputStream bos =  
                    new BufferedOutputStream(new FileOutputStream(file));  
                bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中  
                bos.flush();//输出  
                bos.close();//关闭  
                }catch(Exception e)  
                {  
                    e.printStackTrace();  
                } */ 
                  
            }  
        };  
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
        	requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题             
            //设置拍摄方向  
            this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
            setContentView(R.layout.take_photo);  
            takeCameraBtn = (ImageView)this.findViewById(R.id.photo_icon); //拍照
            takephoto_text = (ImageView)this.findViewById(R.id.takephoto_text);//照片预览
            takeCameraBtn.setOnClickListener(this);
            re_take_btn = (RelativeLayout)this.findViewById(R.id.re_take_btn);//取消
            save_btn = (RelativeLayout)this.findViewById(R.id.save_btn); //保存
            re_take_btn.setOnClickListener(this);
            save_btn.setOnClickListener(this);
            //获得控件  
            mySurfaceView = (SurfaceView)findViewById(R.id.surfaceView1);  
            //获得句柄  
            holder = mySurfaceView.getHolder();  
            //添加回调  
            holder.addCallback(this);  
            //设置类型  
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
            //设置监听  
            mySurfaceView.setOnClickListener(this); 
            
        }
    
    	@Override
    	public void onAutoFocus(boolean success, Camera camera) {
    		if(success)  
            {  
                //设置参数,并拍照  
                Camera.Parameters params = myCamera.getParameters();  
                params.setPictureFormat(PixelFormat.JPEG);  
                params.setPreviewSize(640,480);  
                myCamera.setParameters(params);  
                myCamera.takePicture(null, null, jpeg);
                takeCameraBtn.setVisibility(View.INVISIBLE);
    			 takephoto_text.setVisibility(View.VISIBLE);
    			 re_take_btn.setVisibility(View.VISIBLE);
    			 save_btn.setVisibility(View.VISIBLE);
            }  
    		
    	}
    
    	@Override
    	public void onClick(View v) {
    		switch (v.getId()) {
    		case R.id.photo_icon: //拍照
    			 myCamera.autoFocus(this);//自动对焦
    			
    			break;
            case R.id.re_take_btn://取消
            	saveFlag = false;
            	 myCamera.startPreview();//开启预览  
            	 takeCameraBtn.setVisibility(View.VISIBLE);
    			 takephoto_text.setVisibility(View.INVISIBLE);
    			 re_take_btn.setVisibility(View.INVISIBLE);
    			 save_btn.setVisibility(View.INVISIBLE);
            	break;
            case R.id.save_btn://保存
            	saveFlag = true;
            	savephoto();
            	 myCamera.startPreview();//开启预览  
            	 takeCameraBtn.setVisibility(View.VISIBLE);
    			 takephoto_text.setVisibility(View.INVISIBLE);
    			 re_take_btn.setVisibility(View.INVISIBLE);
    			 save_btn.setVisibility(View.INVISIBLE);
    		default:
    			break;
    		}
    		
    	}
    
    	@Override
    	public void surfaceChanged(SurfaceHolder holder, int format, int width,
    			int height) {
    		 //设置参数并开始预览  
            Camera.Parameters params = myCamera.getParameters();  
            params.setPictureFormat(PixelFormat.JPEG);  
            params.setPreviewSize(640,480);  
            myCamera.setParameters(params);  
            myCamera.startPreview(); 
    		
    	}
    
    	@Override
    	public void surfaceCreated(SurfaceHolder holder) {
    		 //开启相机  
            if(myCamera == null)  
            {  
                myCamera = Camera.open();  
                try {  
                    myCamera.setPreviewDisplay(holder);  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
    		
    	}
    
    	@Override
    	public void surfaceDestroyed(SurfaceHolder holder) {
    		 //关闭预览并释放资源  
            myCamera.stopPreview();  
            myCamera.release();  
            myCamera = null;  
    		
    	}
    	
    
    	public void savephoto(){
    		if(saveFlag){
    			if(imgdata!=null){
    				++imgsize;
    				 try  
    		            {// 获得图片  
    		            Bitmap bm = BitmapFactory.decodeByteArray(imgdata, 0, imgdata.length);  
    		            File file = new File(filePath+"id_"+imgsize+".jpg");  
    		            BufferedOutputStream bos =  
    		                new BufferedOutputStream(new FileOutputStream(file));  
    		            bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中  
    		            bos.flush();//输出  
    		            bos.close();//关闭  
    		            }catch(Exception e)  
    		            {  
    		                e.printStackTrace();  
    		            }
    			}
    		}else {
    			imgdata = null;
    		}
    	}
    
    	//按返回键时,显示弹出框
    	@Override
    	public boolean onKeyDown(int keyCode, KeyEvent event) {  
    		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
    			Intent intent = new Intent(TakePhotoActivity.this,AsyncLoadedImageActivity.class);
    			startActivity(intent);
    			finish();
    			return true; 
    		} 
    		return false;
    	}
    
    	
    }
    

     

      take_photo.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <RelativeLayout android:id="@+id/surface_view_wrapper" android:layout_width="fill_parent" android:layout_height="fill_parent"
      xmlns:android="http://schemas.android.com/apk/res/android">
        <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent">
            <SurfaceView android:id="@+id/surfaceView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" />
            <ImageView android:id="@+id/focus_rectangle" android:background="@null" android:layout_width="200.0dip" android:layout_height="200.0dip" android:layout_centerInParent="true" /> 
        </RelativeLayout>
        <RelativeLayout android:id="@+id/flash_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10.0dip" android:layout_marginBottom="10.0dip" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true">
            <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/takephoto_tab1" android:layout_centerInParent="true" />
            <ImageView android:id="@+id/flash_icon" android:layout_width="21.0dip" android:layout_height="21.0dip" android:src="@drawable/ic_viewfinder_flash_off" android:layout_centerInParent="true" />
        </RelativeLayout>
        <RelativeLayout android:id="@+id/foot_menu" android:background="@drawable/takephoto_bar_hor" android:layout_width="60.0dip" android:layout_height="fill_parent" android:layout_alignParentRight="true">
            <RelativeLayout android:id="@+id/take_btn" android:background="@drawable/takephoto_1_bg_hor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5.0dip" android:layout_alignBottom="@id/surfaceView1" android:layout_alignParentRight="true" android:layout_centerInParent="true">
                <ImageView android:layout_gravity="center" android:id="@+id/photo_icon" android:src="@drawable/takephoto_1_camera" android:layout_centerInParent="true" style="@style/photo_foot_menu_image_button_port" />
            </RelativeLayout>
            <ImageView android:layout_gravity="center" android:id="@+id/takephoto_text" android:paddingLeft="8.0dip" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/takephoto_2_txt" android:layout_centerInParent="true" />
            <RelativeLayout android:id="@+id/re_take_btn" android:visibility="invisible" android:layout_width="wrap_content" android:layout_marginBottom="10.0dip" android:layout_alignParentBottom="true" style="@style/photo_foot_menu_image_button_wrapper">
                <ImageView android:src="@drawable/icon_takephoto_cancel" style="@style/photo_foot_menu_image_button_port" />
            </RelativeLayout>
            <RelativeLayout android:id="@+id/save_btn" android:visibility="invisible" android:layout_marginTop="5.0dip" style="@style/photo_foot_menu_image_button_wrapper">
                <ImageView android:id="@+id/save_photo_icon" android:src="@drawable/icon_takephoto_save" style="@style/photo_foot_menu_image_button_port" />
            </RelativeLayout>
        </RelativeLayout>
    </RelativeLayout>

     源码下载

  • 相关阅读:
    mysql 卸载 linux
    mybatis教程
    Python操作Redis的5种数据类型
    python+selenium 浏览器无界面模式运行
    关闭Sublime Text 3的自动更新
    ui自动化-则神第一天02-学习练习一个网址写脚本
    ui自动化-则神第一天01-html基础和元素定位之面试问题
    ui自动化-则神第一天01
    字典的学习
    安全测试的测试整理
  • 原文地址:https://www.cnblogs.com/andgoo/p/2628579.html
Copyright © 2020-2023  润新知