android之照相、相冊裁剪功能的实现过程
2015-02-18 13:49
323 查看
今天无聊做了一些照相、相冊裁剪功能,希望能够帮到大家!
不多说了,贴代码实际一点:
首先是XML:
然后贴一下主activity:
主要代码已贴完成!
试试吧
不多说了,贴代码实际一点:
首先是XML:
<ImageButton android:id="@+id/imageButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/xiaoma" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="获取图片" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/imageButton1" android:background="@drawable/xiaoma"/>
然后贴一下主activity:
/** * @Title: PicCutDemoActivity.java * @Package com.xiaoma.piccut.demo * @Description: 图片裁剪功能測试 * @author XiaoMa */ public class PicCutDemoActivity extends Activity implements OnClickListener { private ImageButton ib = null; private ImageView iv = null; private Button btn = null; private String tp = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //初始化 init(); } /** * 初始化方法实现 */ private void init() { ib = (ImageButton) findViewById(R.id.imageButton1); iv = (ImageView) findViewById(R.id.imageView1); btn = (Button) findViewById(R.id.button1); ib.setOnClickListener(this); iv.setOnClickListener(this); btn.setOnClickListener(this); } /** * 控件点击事件实现 * * 由于有朋友问不同控件的背景图裁剪怎么实现, * 我就在这个地方用了三个控件,仅仅为了自己记录学习 * 大家认为无用的能够跳过啦 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.imageButton1: ShowPickDialog(); break; case R.id.imageView1: ShowPickDialog(); break; case R.id.button1: ShowPickDialog(); break; default: break; } } /** * 选择提示对话框 */ private void ShowPickDialog() { new AlertDialog.Builder(this) .setTitle("设置头像...") .setNegativeButton("相冊", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); /** * 刚開始,我自己也不知道ACTION_PICK是干嘛的,后来直接看Intent源代码, * 能够发现里面非常多东西,Intent是个非常强大的东西,大家一定细致阅读下 */ Intent intent = new Intent(Intent.ACTION_PICK, null); /** * 以下这句话,与其他方式写是一样的效果,假设: * intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); * intent.setType(""image/*");设置数据类型 * 假设朋友们要限制上传到server的图片类型时能够直接写如:"image/jpeg 、 image/png等的类型" * */ intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, 1); } }) .setPositiveButton("拍照", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); /** * 以下这句还是老样子,调用高速拍照功能,至于为什么叫高速拍照,大家能够參考例如以下官方 * 文档,you_sdk_path/docs/guide/topics/media/camera.html * */ Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); //以下这句指定调用相机拍照后的照片存储的路径 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri .fromFile(new File(Environment .getExternalStorageDirectory(), "xiaoma.jpg"))); startActivityForResult(intent, 2); } }).show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { // 假设是直接从相冊获取 case 1: startPhotoZoom(data.getData()); break; // 假设是调用相机拍照时 case 2: File temp = new File(Environment.getExternalStorageDirectory() + "/xiaoma.jpg"); startPhotoZoom(Uri.fromFile(temp)); break; // 取得裁剪后的图片 case 3: /** * 非空推断大家一定要验证,假设不验证的话, * 在剪裁之后假设发现不惬意,要又一次裁剪,丢弃 */ if(data != null){ setPicToView(data); } break; default: break; } super.onActivityResult(requestCode, resultCode, data); } /** * 裁剪图片方法实现 * @param uri */ public void startPhotoZoom(Uri uri) { /* * 至于以下这个Intent的ACTION是怎么知道的,大家能够看下自己路径下的例如以下网页 * yourself_sdk_path/docs/reference/android/content/Intent.html */ Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); //以下这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 150); intent.putExtra("outputY", 150); intent.putExtra("return-data", true); startActivityForResult(intent, 3); } /** * 保存裁剪之后的图片数据 * @param picdata */ private void setPicToView(Intent picdata) { Bundle extras = picdata.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); Drawable drawable = new BitmapDrawable(photo); /** * 以下凝视的方法是将裁剪之后的图片以Base64Coder的字符方式上 * 传到server,QQ头像上传採用的方法跟这个相似 */ /*ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 60, stream); byte[] b = stream.toByteArray(); // 将图片流以字符串形式存储下来 tp = new String(Base64Coder.encodeLines(b)); 这个地方大家能够写下给server上传图片的实现,直接把tp直接上传就能够了, server处理的方法是server那边的事了,吼吼 假设下载到的server的数据还是以Base64Coder的形式的话,能够用以下方式转换 为我们能够用的图片类型就OK啦...吼吼 Bitmap dBitmap = BitmapFactory.decodeFile(tp); Drawable drawable = new BitmapDrawable(dBitmap); */ ib.setBackgroundDrawable(drawable); iv.setBackgroundDrawable(drawable); } }
主要代码已贴完成!
试试吧
相关文章推荐
- android之照相、相册裁剪功能的实现过程
- Android之照相、相册裁剪功能的实现过程
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Android照相功能驱动层中HAL的实现(基于OK6410开发板+OV9650摄像头)
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- android困惑之UI---imageView实现对图片的选取,和裁剪功能。。。。
- android自定义View实现裁剪图片功能,不使用系统的
- 区域实现Android实现图片的裁剪(不调用系统功能)
- Android 拍照+图片 裁剪 功能的实现
- android图片裁剪功能实现详解
- Android实现类似换QQ头像功能(图片裁剪)
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
- Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
- 实现照相功能需要添加的权限和硬件在androidmanifest.xml文件中
- Android照相功能驱动层中HAL的实现(基于OK6410开发板+OV9650摄像头)
- Android实现图片的裁剪(不调用系统功能)
- android:照片涂画功能实现过程及原理详解