怎样给网站做后台/南宁百度seo排名优化
如若转载请注明:王亟亟的大牛之路
在贴代码和讲实践之前先上图,让各位看官知道这是什么玩意
初始化的视图,就一个Activity
拍照时的状态,因为不是美图秀秀啊之类的摄像软件,所以这个清晰度已经够了
选择相册内图片的截图
先来说下Camera类
Android手机关于Camera的使用,一是拍照,二是摄像。
我们可以使用两类方法:一是借助Intent和MediaStroe调用系统Camera App程序来实现拍照和摄像功能,二是根据Camera API自写Camera程序。(例子是第一种,因为对拍摄内容没有更多的要求)
授权
在AndroidMainfest.xml中声明使用照相机.
Camera权限, 你必须在AndroidMainfest.xml中声明使用照相机的权限,例如
注:如果你是调用系统Camera程序的话,就不必声明
Camera特性,你必须在AndroidMainfest.xml中声明照相机特性,例如:
<uses-feature android:name="android.hardware.camera" />
如果你的程序可能需要使用照相机,但并不是一定的,那么可以设置android:required属性,比如:
<uses-feature android:name="android.hardware.camera"android:required="false" />
存储权限,如果你的程序想在扩展存储设备上(如sd卡)存储你的照片或者拍摄的视频,那么必须声明如下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
音频录制权限, 为了录制音频或者视频,你必须在AndroidMainfest.xml文件中设置如下权限: <uses-permission android:name="android.permission.RECORD_AUDIO" />
使用系统Camera程序
这是一种可以让你的程序以最少的编码,然后可以快速使用照相机的方法,它通过一个Intent来调用系统的Camera程序。一个Camera的intent可以发起一个请求,来让系统的Camera应用程序去拍摄照片或者录制视频,而且可以返回拍摄或者录制的结果给你自己的应用程序,那么接下来,我们将讨论如何使用这种方法。
i. 构造一个Camera Intent – 创建一个拍摄照片或者视频的Intent, 我们可以使用如下两种方法:
MediaStore.ACTION_IMAGE_CAPTURE – 一个intent action,用来向系统Camera程序请求拍摄图片。
MediaStore.ACTION_VIDEO_CAPTURE – 一个intent action, 用来向系统Camera程序请求录制视频。
ii. 开启Camera intent – 通过调用startActivityForResult()来执行Camera intent, 在你调用这个方法之后,系统Camera程序就是出现在用户界面,然后用户就可以拍摄照片或者视频了。
iii. 接收Intent 结果 – 在你的应用程序里面建立一个onActivityResult()方法来接收来自系统Camera程序的执行结果。当用户拍摄了照片或者视频(也许取消了拍摄操作),系统就会调用这个方法。
图片拍摄Intent
使用系统Camera来拍摄图片,是一种以最快的速度,最少的代码,让你的程序能够拍照的方法。一个图片拍摄的intent可以包含如下扩展信息:
i. MediaStore.EXTRA_OUTPUT – 指定一个Uri对象,系统Camera程序会把拍摄的图片存储到指定位置。这个设置一般是强烈推荐的。如果你不指定这个Uri路径,那么系统Camera程序会把图片以一个默认的名字,存储在一个默认的位置。我们可以通过返回的intent,然后用Intent.getData()方法来获取这个值。
ii. 下面这个例子可以告诉大家怎么构造一个拍摄图片的intent,并且执行它。
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;private Uri fileUri;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);}当startActivityForResult()方法执行之后,用户就会看到系统的Camera界面。当用户完成拍摄照片(或者取消拍摄)之后,用户界面就会返回你自己的应用程序。那么你必须拦截onActivityResult方法,以便接收执行结果和继续你自己代码的逻辑。**c. 视频录制intent**
使用系统Camera来录制视频,是一种以最快的速度,最少的代码,让你的程序能够录制视频的方法。一个视频录制的intent可以包含如下扩展信息:MediaStore.EXTRA_OUTPUT -- 指定一个Uri对象,系统Camera程序会把录制的视频存储到指定位置。这个设置一般是强烈推荐的。如果你不指定这个Uri路径,那么系统Camera程序会把视频以一个默认的名字,存储在一个默认的位置。我们可以通过返回的intent,然后用Intent.getData()方法来获取这个值。MediaStore.EXTRA_VIDEO_QUALITY -- 视频质量,0(低质量,比较小的文件来存储视频), 1(高质量,比较大的文件来存储视频)MediaStore.EXTRA_DURATION_LIMIT -- 设置一个值来限制视频时间长度,秒为单位。MediaStore.EXTRA_SIZE_LIMIT -- 设置一个值来限制视频大小,byte为单位。**理论上的东西就讲这么些,源码和外面的翻译网上有,现在上代码!**
主Activity,就一个Activity
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
//图片自定义控件
ImageView imageview;
//按钮控件
Button makephoto, choicephoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//检查策略
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
.penaltyLog().penaltyDeath().build());
//获取id,否则空指针findViewById();initListener();
}@Override
public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;
}@Override
public boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);
}private void findViewById() {imageview = (ImageView) findViewById(R.id.imageview);choicephoto = (Button) findViewById(R.id.choicephoto);makephoto = (Button) findViewById(R.id.makephoto);
}private void initListener() {choicephoto.setOnClickListener(this);makephoto.setOnClickListener(this);
}//用于OnClickListener
@Override
public void onClick(View v) {switch (v.getId()) {case R.id.makephoto:Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);long time = Calendar.getInstance().getTimeInMillis();intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/DCIM/", time+ ".jpg")));startActivityForResult(intent, 1);break;case R.id.choicephoto:Intent intent2 = new Intent(Intent.ACTION_PICK, null);intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,// 获取所有图片信息"image/*");startActivityForResult(intent2, 2);break;default:break;}
} //拍照必须回调的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == 0)return;// 拍照if (requestCode == 1) {// 设置文件保存路径File picture = new File(Environment.getExternalStorageDirectory()+ "/tempImage.jpg");startPhotoZoom(Uri.fromFile(picture));}if (data == null)return; // 读取相册缩放图片if (requestCode == 2 && resultCode == RESULT_OK&& null != data) {Uri selectedImage = data.getData();String[] filePathColumn = {MediaStore.Images.Media.DATA};Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);cursor.moveToFirst();int columnIndex = cursor.getColumnIndex(filePathColumn[0]);String picturePath = cursor.getString(columnIndex);cursor.close();imageview.setImageBitmap(BitmapFactory.decodeFile(picturePath));}// 处理结果if (requestCode == 3) {Bundle extras = data.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");//File fImage = new File("D:\\sdcard.img");try {ByteArrayOutputStream stream = new ByteArrayOutputStream();//FileOutputStream stream = new FileOutputStream(fImage);photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件stream.close();} catch (IOException e) {e.printStackTrace();}//ByteArrayOutputStream stream = new ByteArrayOutputStream();imageview.setImageBitmap(photo); // 把图片显示在ImageView控件上}}super.onActivityResult(requestCode, resultCode, data);
}//剪裁图片
public void startPhotoZoom(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 300);intent.putExtra("outputY", 400);intent.putExtra("return-data", true);startActivityForResult(intent, 3);
}
}
<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:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context=".MainActivity"><LinearLayout
android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:id="@+id/toolLayout"><Button
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="拍照"android:id="@+id/makephoto"android:layout_weight="1"android:background="@color/green"android:textColor="@color/white" /><Button
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选择相册"android:id="@+id/choicephoto"android:layout_weight="1"android:background="@color/white"android:textColor="@color/light_blue" /></LinearLayout><RelativeLayout
android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_above="@+id/toolLayout"android:id="@+id/contentLayout"><ImageView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/imageview"android:layout_gravity="clip_horizontal"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:background="@color/gray" /></RelativeLayout>
</RelativeLayout>
colors:
<?xml version="1.0" encoding="utf-8"?>
<resources><color name="gray">#5e5e5e</color><color name="green">#ff00bf00</color><!-- 白色 --><color name="white">#FFFFFF</color><!-- 浅蓝 --><color name="light_blue">#005293</color>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="example.wjj.camera"><application
android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activity
android:name=".MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
具体功能还是看源码吧!
下载地址:http://yunpan.cn/cQXjwrrHXRIjf 访问密码 05e3
有问题欢迎QQ452270579联系!