轉載請註明原文出處:奔跑的蝸牛(袁方的技術博客)點擊打開連接
java
1、當利用textview顯示內容時,顯示內容過多可能會折行或顯示不全,那樣效果很很差。今天發現android api中已經給出自動省略的功能。android
實現以下:數據庫
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/hello" android:ellipsize="end" android:singleLine="true" />
ImageView的屬性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType)。android:scaleType是控制圖片如何 resized/moved來匹對ImageView的size。ImageView.ScaleType / android:scaleType值的意義區別:canvas
CENTER /center 按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則截 取圖片的居中部分顯示 CENTER_CROP / centerCrop 按比例擴大圖片的size居中顯示,使得圖片長 (寬)等於或大於View的長(寬) CENTER_INSIDE / centerInside 將圖片的內容完整居中顯示,經過按比例縮小 或原來的size使得圖片長/寬等於或小於View的長/寬 FIT_CENTER / fitCenter 把圖片按比例擴大/縮小到View的寬度,居中顯示 FIT_END / fitEnd 把 圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置 FIT_START / fitStart 把 圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置 FIT_XY / fitXY 把圖片 不按比例 擴大/縮小到View的大小顯示 MATRIX / matrix 用矩陣來繪製
Android 經過Uri獲取Bitmap對象
api
private Bitmap getBitmapFromUri(Uri uri) { try { // 讀取uri所在的圖片 Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); return bitmap; } catch (Exception e) { Log.e("[Android]", e.getMessage()); Log.e("[Android]", "目錄爲:" + uri); e.printStackTrace(); return null; } }
public class Activity01 extends Activity { /** * Gallery類概述(Gallery)此單詞翻譯過來爲畫廊,美術館 一種view,以水平列表的方式顯示在屏幕中央 看一眼圖片就知道咋回事了 * 此類繼承了 AbsSpinner */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 得到Gallery對象 Gallery g = (Gallery) findViewById(R.id.Gallery01); // 添加ImageAdapter給Gallery對象 注意哦Gallery類並無setAdapter這個方法 // 這個方法是從AbsSpinner類繼承的 g.setAdapter(new ImageAdapter(this)); // 設置Gallery的背景圖片 g.setBackgroundResource(R.drawable.bg0); // 設置Gallery的事件監聽 g.setOnItemClickListener(new GalleryItemListener()); } class GalleryItemListener implements OnItemClickListener { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(Activity01.this, 」你選擇了」 + (position + 1) + 」 號圖片」, Toast.LENGTH_SHORT).show(); } } }
public class ImageAdapter extends BaseAdapter { // 定義Context private Context mContext; // 定義整型數組 即圖片源 private Integer[] mImageIds = { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8, }; // 聲明ImageAdapter public ImageAdapter(Context c) { mContext = c; } // 獲取圖片的個數 public int getCount() { return mImageIds.length; } // 獲取圖片在庫中的位置 public Object getItem(int position) { return position; } // 獲取圖片ID public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageview = new ImageView(mContext); // 給ImageView設置資源 imageview.setImageResource(mImageIds[position]); // 設置佈局 圖片120*120 imageview.setLayoutParams(new Gallery.LayoutParams(120, 120)); // 設置顯示比例類型 imageview.setScaleType(ImageView.ScaleType.FIT_CENTER); return imageview; } }
<?xml version=」1.0″ encoding=」utf-8″?> <Gallery xmlns:android=」http://schemas.android.com/apk/res/android」 android:id=」@+id/Gallery01″ android:layout_width=」fill_parent」 android:layout_height=」fill_parent」 android:spacing=」2px」 > <!– android:spacing=」2px」用來設置圖片之間的間距 –> </Gallery>
5、介紹一個重要方法那就是requestWindowFeature(featrueId),它的功能是啓用窗體的擴展特性。參數是Window類中定義的常量。數組
枚舉常量ide
1.DEFAULT_FEATURES:系統默認狀態,通常不須要指定 2.FEATURE_CONTEXT_MENU:啓用ContextMenu,默認該項已啓用,通常無需指定 3.FEATURE_CUSTOM_TITLE:自定義標題。當須要自定義標題時必須指定。如:標題是一個按鈕時 4.FEATURE_INDETERMINATE_PROGRESS:不肯定的進度 5.FEATURE_LEFT_ICON:標題欄左側的圖標 6.FEATURE_NO_TITLE:吳標題 7.FEATURE_OPTIONS_PANEL:啓用「選項面板」功能,默認已啓用。 8.FEATURE_PROGRESS:進度指示器功能 9.FEATURE_RIGHT_ICON:標題欄右側的圖標
// 隱藏頂部程序名稱 寫在setContentView(R.layout.xxxx);以前,否則報錯 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); requestWindowFeature(Window.FEATURE_NO_TITLE); // 隱藏狀態欄 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
先看一個實例:佈局
String[] projection = { MediaStore.Images.Thumbnails._ID ,MediaStore.Images.Thumbnails.DATA}; Cursor cursor = mActivity.getContentResolver().query( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,//指定縮略圖數據庫的Uri projection,//指定所要查詢的字段 MediaStore.Images.Thumbnails._ID + " = ?",//查詢條件 new String[] {"123" }, //查詢條件中問號對應的值 null); cursor.moveToFirst(); String id = cursor.getString(0); String data = cursor.getString(1);
查詢圖片縮略圖數據庫,獲取id等於123的縮略圖信息。post
轉換成Sql語句即爲 select MediaStore.Images.Thumbnails._ID ,MediaStore.Images.Thumbnails.DATA from MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI where MediaStore.Images.Thumbnails._ID = 123學習
若是要查詢圖片,Uri地址爲:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
當要獲取縮略圖時:Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail (mActivity.getContentResolver(), id, Thumbnails.MICRO_KIND, null)
(1)讀取SD卡上面的圖片信息
//想要的返回值所在的列 String[] projection = { MediaStore.Images.Thumbnails._ID}; //圖片信息存儲在 android.provider.MediaStore.Images.Thumbnails數據庫 //快速查詢數據庫中的圖片對應存放路勁 Cursor cursor = managedQuery( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, //List of columns to return :想要他返回的列 null, // Return all rows null, null); int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); uriArray = new Uri[cursor.getCount()];//把圖片路徑放在數組中
(2)將讀取的圖片生成縮略圖
while(cursor.moveToNext()&&i<cursor.getCount()) { //移到指定的位置,遍歷數據庫 cursor.moveToPosition(i); uri = Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,cursor.getInt(columnIndex)+""); uriArray[i]=uri; try { bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); if (bitmap != null) { //將原來的位圖轉換成新的位圖 newBitmap = Bitmap.createScaledBitmap(bitmap,80, 80,true); bitmap.recycle();//釋放內存 if (newBitmap != null) { publishProgress(new LoadedImage(newBitmap)); } } } catch (IOException e) {} i++; }
android在處理一寫圖片資源的時候,會進行一些類型的轉換,如今有空整理一下:
一、Drawable → Bitmap
public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); //canvas.setBitmap(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; }
二、從資源中獲取Bitmap
Resources res=getResources(); Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
三、Bitmap → byte[]
private byte[] Bitmap2Bytes(Bitmap bm){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }
四、 byte[] → Bitmap
private Bitmap Bytes2Bimap(byte[] b){ if(b.length!=0){ return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; } }
7、保存圖片到圖庫
Images.Media.EXTERNAL_CONTENT_URI這是一個系統圖片數據表,圖庫裏面的圖片數據都是從這裏面查詢出來的;調用insert就是往這個表裏面插入一條數據,插入成功的話,下次加載圖庫,就能夠把新加入的數據從這個表中查詢並展現出來了,
Images.Media.EXTERNAL_CONTENT_URI:數據表確定就包括一些屬性字段,以下: values.put(Images.Media.TITLE, title); values.put(Images.Media.DISPLAY_NAME, filename); values.put(Images.Media.DATE_TAKEN, dateTaken); values.put(Images.Media.MIME_TYPE, IMAGE_MIME_TYPE); values.put(Images.Media.ORIENTATION, degree[0]); values.put(Images.Media.DATA, filePath); values.put(Images.Media.SIZE, size);
8、根據Uri獲取文件絕對路徑