今天无聊做了一些照相、相冊裁剪功能,希望能够帮到大家!

不多说了,贴代码实际一点:

首先是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. */@Overridepublic 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);}/** * 控件点击事件实现 *  * 由于有朋友问不同控件的背景图裁剪怎么实现, * 我就在这个地方用了三个控件,仅仅为了自己记录学习 * 大家认为无用的能够跳过啦 */@Overridepublic 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();}@Overrideprotected 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);}}


主要代码已贴完成!

试试吧

更多相关文章

  1. Android中TextView中内容不换行的解决方法
  2. UI控件--EditText
  3. 控件布局_LinearLayout
  4. LinearLayout 内部控件居中
  5. Android模拟、实现、触发系统按键事件的方法
  6. Android常用控件总结
  7. android 2.2+ 完全退出程序的方法
  8. C# mono android 图片上传进度条实现
  9. android MediaPlayer出现RuntimeException: failure code: -38崩

随机推荐

  1. android的PowerManager和PowerManager.Wa
  2. android:shrinkColumns的用法 (2011-04-2
  3. Android(安卓)快速运行的秘诀
  4. AIDL --- Android中的远程接口(3)
  5. Android编程简单设置ListView分割线的方
  6. Android(安卓)Studio中新建项目时Your an
  7. Android启动页上下白屏适配
  8. AndroidStudio 开发自我小结(1)
  9. Android(安卓)NDK 知识系列(一)
  10. Android自学笔记-7-Android中的junit