編輯:關於Android編程
先調用android的系統工具,獲取圖片生成bitmap文件,再使用android中的二值化技術,將圖片轉化成黑白圖片,主界面代碼:
package com.example.blackwhite; import java.io.IOException; import android.media.ThumbnailUtils; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity { private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; // 這裡的IMAGE_CODE是自己任意定義的 private Button addPic = null; private ImageView imgShow = null; private TextView imgPath = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // TODO Auto-generated method stub addPic = (Button) findViewById(R.id.btn_add); imgPath = (TextView) findViewById(R.id.img_path); imgShow = (ImageView) findViewById(R.id.imgShow); addPic.setOnClickListener(listener); } private OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Button btn = (Button) v; switch (btn.getId()) { case R.id.btn_add: setImage(); break; } } private void setImage() { // TODO Auto-generated method stub // 使用intent調用系統提供的相冊功能,使用startActivityForResult是為了獲取用戶選擇的圖片的地址 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); } }; protected void onActivityResult(int requestCode, int resultCode, Intent data) { // RESULT_OK 是系統自定義得一個常量 if (resultCode != RESULT_OK) { Log.e("onActivityResult", "返回的resultCode出錯"); return; } Bitmap bm = null; // 外界的程序訪問ContentProvider所提供數據 可以通過ContentResolver接口 ContentResolver resolver = getContentResolver(); // 判斷接收的Activity是不是選擇圖片的 if (requestCode == IMAGE_CODE) { try { // 獲得圖片的地址Uri Uri originalUri = data.getData(); //根據圖片的URi生成bitmap bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); //將圖片轉化成黑白圖片 bm =convertToBlackWhite(bm); //顯得到bitmap圖片 imgShow.setImageBitmap(bm); // 新建一個字符串數組用於存儲圖片地址數據。 String[] proj = { MediaStore.Images.Media.DATA }; // android系統提供的接口,用於根據uri獲取數據 Cursor cursor = managedQuery(originalUri, proj, null, null, null); // 獲得用戶選擇圖片的索引值 int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); // 將游標移至開頭 ,防止引起隊列越界 cursor.moveToFirst(); // 根據索引值獲取圖片路徑 String path = cursor.getString(column_index); imgPath.setText(path); } catch (IOException e) { Log.e("getImg", e.toString()); } } } /** * 將彩色圖轉換為純黑白二色 * * @param 位圖 * @return 返回轉換好的位圖 */ public static Bitmap convertToBlackWhite(Bitmap bmp) { int width = bmp.getWidth(); // 獲取位圖的寬 int height = bmp.getHeight(); // 獲取位圖的高 int[] pixels = new int[width * height]; // 通過位圖的大小創建像素點數組 bmp.getPixels(pixels, 0, width, 0, 0, width, height); int alpha = 0xFF << 24; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int grey = pixels[width * i + j]; //分離三原色 int red = ((grey & 0x00FF0000) >> 16); int green = ((grey & 0x0000FF00) >> 8); int blue = (grey & 0x000000FF); //轉化成灰度像素 grey = (int) (red * 0.3 + green * 0.59 + blue * 0.11); grey = alpha | (grey << 16) | (grey << 8) | grey; pixels[width * i + j] = grey; } } //新建圖片 Bitmap newBmp = Bitmap.createBitmap(width, height, Config.RGB_565); //設置圖片數據 newBmp.setPixels(pixels, 0, width, 0, 0, width, height); Bitmap resizeBmp = ThumbnailUtils.extractThumbnail(newBmp, 380, 460); return resizeBmp; } }
目前市面上的應用,貌似除了微信和手Q都會比較擔心被用戶或者系統(廠商)殺死問題。本文對 Android 進程拉活進行一個總結。Android 進程拉活包括兩個層面:A.
好久沒寫點東西了,最近看到了一個轉場動畫比較酷炫,今天就來簡單滴分析一下。先看下今天的效果圖。分析下效果: 進入詳情頁的時候有共享元素,圓形動畫,文字部分的上移動畫,源碼
突然發現好久沒有寫博客了,一直放到筆記裡面,今天update一下。最近做的一個項目中,是盒子+電視,用戶通過遙控器來操作。這裡只是說下GridView在當前業務下的簡單使
本文實例為大家分享了Android自定義下拉刷新上拉加載的具體實現步驟,供大家參考,具體內容如下實現的方式是SwipeRefreshLayout + RecyclerVi