編輯:關於Android編程
今天無聊做了一些照相、相冊裁剪功能,希望可以幫到大家!
不多說了,貼代碼實際一點:
首先是XML:
然後貼一下主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/*");設置數據類型 * 如果朋友們要限制上傳到服務器的圖片類型時可以直接寫如:"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的字符方式上 * 傳到服務器,QQ頭像上傳采用的方法跟這個類似 */ /*ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 60, stream); byte[] b = stream.toByteArray(); // 將圖片流以字符串形式存儲下來 tp = new String(Base64Coder.encodeLines(b)); 這個地方大家可以寫下給服務器上傳圖片的實現,直接把tp直接上傳就可以了, 服務器處理的方法是服務器那邊的事了,吼吼 如果下載到的服務器的數據還是以Base64Coder的形式的話,可以用以下方式轉換 為我們可以用的圖片類型就OK啦...吼吼 Bitmap dBitmap = BitmapFactory.decodeFile(tp); Drawable drawable = new BitmapDrawable(dBitmap); */ ib.setBackgroundDrawable(drawable); iv.setBackgroundDrawable(drawable); } }
主要代碼已貼完畢!
試試吧
Android 列表組件 ListView列表組件是開發中經常用到組件,使用該組件在使用時需要為它提供適配器,由適配器提供來確定顯示樣式和顯示數據。下面看一個例子:新建一
在項目的開發過程我們離不開圖片,而有時候需要調用本地的圖片,有時候需要調用拍照圖片。同時實現拍照的方法有兩種,一種是調用系統拍照功能,另一種是自定義拍照功能。而本博文目前
1 功能描述類似王者榮耀,按下的技能如果是需要預判的或者是可以選擇單一目標,產生一個搖桿,在地形上顯示輔助的UI提示。存在以下幾種情況:1.扇形范圍技能 2.方
項目需要實現一個計時的功能,利用Chronometer雖然可以很方便的實現計時功能,但需要的卻是一個倒計時控件。百度了一下方法不少,倒計時的卻沒有,於是用Chronome