多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android選取相機、相冊圖片進行裁剪,并更新UI

Android選取相機、相冊圖片進行裁剪,并更新UI

來源:程序員人生   發布時間:2015-08-20 07:58:38 閱讀次數:2757次

demo源碼:http://download.csdn.net/detail/u010778159/8650897

效果圖:
這里寫圖片描述
這里寫圖片描述

界面非常的簡單,只有1個imageView,通過點擊該ImageView,從相冊當選取照片,或拍照,將得到的照片按要求進行裁剪,然后將裁剪后的照片更新到ImageView中。

現在,來看1下工程的xml,和.java文件:
這里寫圖片描述
這里寫圖片描述

  1. 有兩個xml文件,main.xml是進入app時的主頁面,有1個ImageView
  2. select_pic_layout.xml是點擊ImageView以后彈出來的框,1共有3個button,從中可以選擇是從相機中獲得圖片還是相冊中獲得圖片

來看下詳細代碼:
main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#F3F1DA" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/title_bg" android:gravity="center" android:orientation="horizontal" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="@string/title_bar_txt" android:textColor="@android:color/white" /> </LinearLayout> <!-- image switch --> <RelativeLayout android:id="@+id/switch_face_rl" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/item_edit_bg" android:clickable="true" android:padding="5dip" > <ImageView android:id="@+id/face" android:layout_width="match_parent" android:layout_height="180dp" android:layout_alignParentLeft="true" android:scaleType="centerCrop" android:src="@drawable/mini_avatar" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dip" android:layout_marginTop="5dip" android:layout_toRightOf="@id/face" android:text="設置頭像" android:textColor="@android:color/black" /> </RelativeLayout> </LinearLayout>

select_pic_layout.xml:

<?xml version="1.0" encoding="utf⑻"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" > <LinearLayout android:id="@+id/dialog_layout" android:layout_width="fill_parent" android:layout_height="200dp" android:layout_alignParentBottom="true" android:background="@drawable/sf_takephoto_bg" android:gravity="center_horizontal" android:orientation="vertical" > <Button android:id="@+id/btn_take_photo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_marginTop="20dip" android:background="@drawable/btn_style_alert_dialog_button" android:text="拍照" android:textStyle="bold" /> <Button android:id="@+id/btn_pick_photo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_marginTop="5dip" android:background="@drawable/btn_style_alert_dialog_button" android:text="從相冊選擇" android:textStyle="bold" /> <Button android:id="@+id/btn_cancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="15dip" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_marginTop="15dip" android:background="@drawable/btn_style_alert_dialog_cancel" android:text="取消" android:textColor="#ffffff" android:textStyle="bold" /> </LinearLayout> </RelativeLayout>

MainActivity.java:

import java.io.File; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; /** * * @author Liuzhipeng (316910444@qq.com) Create at 2015⑷⑶0 上午11:14:31 */ public class MainActivity extends Activity implements android.view.View.OnClickListener { private ImageView faceImage; /* 要求碼 */ private static final int REQUEST_PHOTO = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 去掉標題 setContentView(R.layout.main); faceImage = (ImageView) findViewById(R.id.face); // 設置事件監聽 faceImage.setOnClickListener(this); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub switch (arg0.getId()) { case R.id.face: Intent intent = new Intent(this, SelectPicActivity.class); startActivityForResult(intent, REQUEST_PHOTO); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub if(resultCode==Activity.RESULT_OK){ switch (requestCode) { case REQUEST_PHOTO: Log.e("PhotoClip", "aaaaaaaaaa"); if (data != null) { byte[] bis = data.getByteArrayExtra("bitmap"); Bitmap bm = BitmapFactory.decodeByteArray(bis, 0, bis.length); faceImage.setImageBitmap(bm); } default: break; } } super.onActivityResult(requestCode, resultCode, data); } }

SelectPicActivity.java:

import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; /** * @author 劉志鵬<br> * Email :316910444@qq.com<br> * QQ: 316910444<br> * @version 創建時間? 2015⑷⑶0 上午11:33:03 */ public class SelectPicActivity extends Activity implements OnClickListener { /*** * 使用照相機拍照獲得圖?? */ public static final int SELECT_PIC_BY_TACK_PHOTO = 1; /*** * 使用相冊中的圖片 */ public static final int SELECT_PIC_BY_PICK_PHOTO = 2; private LinearLayout dialogLayout; private Button takePhotoBtn, pickPhotoBtn, cancelBtn; // MainActivity中跳轉到SelectPicActivity的Intent private Intent lastIntent; private static final int PHOTO_REQUEST = 1; private static final int CAMERA_REQUEST = 2; private static final int PHOTO_CLIP = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.select_pic_layout); initView(); } /** * 初始化加載View */ private void initView() { dialogLayout = (LinearLayout) findViewById(R.id.dialog_layout); dialogLayout.setOnClickListener(this); takePhotoBtn = (Button) findViewById(R.id.btn_take_photo); takePhotoBtn.setOnClickListener(this); pickPhotoBtn = (Button) findViewById(R.id.btn_pick_photo); pickPhotoBtn.setOnClickListener(this); cancelBtn = (Button) findViewById(R.id.btn_cancel); cancelBtn.setOnClickListener(this); // 得到在MainActivity中的Intent lastIntent = getIntent(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.dialog_layout: finish(); break; case R.id.btn_take_photo: // 調用攝像頭 getPicFromCamera(); break; case R.id.btn_pick_photo: // 從相冊中獲得圖片 getPicFromPhoto(); break; default: finish(); break; } } private void getPicFromPhoto() { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, PHOTO_REQUEST); } private void getPicFromCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 下面這句指定調用相機拍照后的照片存儲的路徑 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File( Environment.getExternalStorageDirectory(), "test.jpg"))); startActivityForResult(intent, CAMERA_REQUEST); } // 點擊空白處,finish掉,退回到MainActivity @Override public boolean onTouchEvent(MotionEvent event) { finish(); return super.onTouchEvent(event); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case CAMERA_REQUEST: switch (resultCode) { case -1:// ⑴表示拍照成功 // 得到剛剛拍照的照片 File file = new File(Environment.getExternalStorageDirectory() + "/test.jpg"); if (file.exists()) { // 對圖片進行裁剪,傳入該文件的Uri photoClip(Uri.fromFile(file)); } break; default: break; } break; case PHOTO_REQUEST: if (data != null) { photoClip(data.getData()); } break; case PHOTO_CLIP: // 圖片裁剪完以后 if (data != null) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); //將Bitmap轉換為Byte[]通過Bundle傳到MainActivity ByteArrayOutputStream baos = new ByteArrayOutputStream(); //對圖片進行緊縮,第2個參數為緊縮的百分比,100為不緊縮 photo.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] bitmapByte = baos.toByteArray(); lastIntent.putExtra("bitmap", bitmapByte); //跳回到MainActivity,調用OnActivityResult() setResult(Activity.RESULT_OK, lastIntent); finish(); // faceImage.setImageBitmap(photo); } } break; default: break; } } private void photoClip(Uri uri) { // 調用系統中自帶的圖片剪裁 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", 7); intent.putExtra("aspectY", 4); // outputX outputY 是裁剪圖片寬高 intent.putExtra("outputX", 315); intent.putExtra("outputY", 180); // 如果為true,會返回bitmap,通過data.getExtras().getParcelable("data");獲得 intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_CLIP); } }

基本上注釋都寫得很清楚了,還有1伙的話,大家可以下載demo運行1下。

demo源碼:http://download.csdn.net/detail/u010778159/8650897

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美日韩亚洲视频 | 日韩在线一区二区 | 亚洲人视频在线观看 | 视频在线观看免费网址 | 正在播放国产精品放孕妇 | tube欧美69xxxx | 国产免费福利体检区久久 | 97夜夜操 | 亚洲成人伊人网 | 日本欧美一区二区三区在线观看 | 波多野结衣一区二区三区在线观看 | 自拍 另类 综合 欧美小说 | 男女免费爽爽爽在线视频 | www.激情小说 | 日韩一级欧美一级毛片在线 | 天天天天鲁天天拍一拍 | 中文字幕免费人成乱码中国 | a免费国产一级特黄aa大 | 亚洲精品国产精品国自产 | 亚欧美图片自偷自拍另类 | 精品国产成人综合久久小说 | 91在线一区二区 | 日韩 欧美 自拍 在线 视频 | 女女同性一区二区三区四区 | 特级黄色淫片 | 欧美一区二区三区四区在线观看 | 在线观看的免费视频网站 | 欧美在线视频观看 | 免费自拍视频 | 国亚洲欧美日韩精品 | 天堂在线影院 | 手机在线一区二区三区 | 综合网小说图片区 | 欧美日本一道高清免费3区 欧美日本一道免费一区三区 | 免费国产阿v视频在线观看 免费国产成高清人在线视频 | 精品久久久久久久一区二区手机版 | 涩涩免费播放观看在线视频 | 欧美xx毛片免费看 | 欧美com| 日本在线播放一区 | 视频在线h|