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

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

首先是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屏幕适配
  2. Android调用系统分享,资源未找到问题
  3. Android中Gallery的应用
  4. C# mono android 图片上传进度条实现
  5. android上传图片至服务器
  6. Android获取本地图片之ACTION_GET_CONTENT与ACTION_PICK区别
  7. 2011.12.06——— android 带边框的ImageView
  8. 关于文字颜色/图片背景---selector状态列表
  9. [Android] 代码实现按钮/图片自旋转(中心旋转)

随机推荐

  1. Android中通过xml给布局添加边框
  2. 安装Termux的手机上运行Python
  3. Android侧滑控件之DrawerLayout的使用
  4. Android获取控件宽高的几种方式
  5. Android(安卓)为所有app开放 系统app才能
  6. Android(安卓)数据Parcel序列化过程源码
  7. Activity的启动流程分析
  8. Android Studio启动时出现unable to acce
  9. AVD(android virtual device)路径设置
  10. Android与Windows Socket通信,TLS双向认证