Android學(xué)習(xí)筆記-實(shí)用代碼合集
本文為大家整理了Android學(xué)習(xí)實(shí)用代碼合集,希望對(duì)大家有所幫助。
一、當(dāng)利用textview顯示內(nèi)容時(shí),顯示內(nèi)容過(guò)多可能會(huì)折行或顯示不全,那樣效果很不好。今天發(fā)現(xiàn)android api中已經(jīng)給出自動(dòng)省略的功能。
實(shí)現(xiàn)如下:
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/hello"
- android:ellipsize="end"
- android:singleLine="true"
- />
二、學(xué)習(xí)]ImageView的scaletype屬性
ImageView的屬性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType)。android:scaleType是控制圖片如何 resized/moved來(lái)匹對(duì)ImageView的size。ImageView.ScaleType / android:scaleType值的意義區(qū)別:
- CENTER /center 按圖片的原來(lái)size居中顯示,當(dāng)圖片長(zhǎng)/寬超過(guò)View的長(zhǎng)/寬,則截 取圖片的居中部分顯示
- CENTER_CROP / centerCrop 按比例擴(kuò)大圖片的size居中顯示,使得圖片長(zhǎng) (寬)等于或大于View的長(zhǎng)(寬)
- CENTER_INSIDE / centerInside 將圖片的內(nèi)容完整居中顯示,通過(guò)按比例縮小 或原來(lái)的size使得圖片長(zhǎng)/寬等于或小于View的長(zhǎng)/寬
- FIT_CENTER / fitCenter 把圖片按比例擴(kuò)大/縮小到View的寬度,居中顯示
- FIT_END / fitEnd 把 圖片按比例擴(kuò)大/縮小到View的寬度,顯示在View的下部分位置
- FIT_START / fitStart 把 圖片按比例擴(kuò)大/縮小到View的寬度,顯示在View的上部分位置
- FIT_XY / fitXY 把圖片 不按比例 擴(kuò)大/縮小到View的大小顯示
- MATRIX / matrix 用矩陣來(lái)繪制
三、Uri與String之間的轉(zhuǎn)換
Uri u = Uri.parse( "content://media/internal/audio/media/81" );
Android 通過(guò)Uri獲取Bitmap對(duì)象
- 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;
- }
- }
四、Android圖片拖動(dòng)效果(Gallery及ImageAdapter用法)
- public class Activity01 extends Activity
- {
- /**
- * Gallery類(lèi)概述(Gallery)此單詞翻譯過(guò)來(lái)為畫(huà)廊,美術(shù)館 一種view,以水平列表的方式顯示在屏幕中央 看一眼圖片就知道咋回事了
- * 此類(lèi)繼承了 AbsSpinner
- */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 獲得Gallery對(duì)象
- Gallery g = (Gallery) findViewById(R.id.Gallery01);
- // 添加ImageAdapter給Gallery對(duì)象 注意哦Gallery類(lèi)并沒(méi)有setAdapter這個(gè)方法
- // 這個(gè)方法是從AbsSpinner類(lèi)繼承的
- g.setAdapter(new ImageAdapter(this));
- // 設(shè)置Gallery的背景圖片
- g.setBackgroundResource(R.drawable.bg0);
- // 設(shè)置Gallery的事件監(jiān)聽(tīng)
- 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) + ” 號(hào)圖片”,
- Toast.LENGTH_SHORT).show();
- }
- }
- }
ImageAdapter類(lèi)繼承自BaseAdapter類(lèi) 繼承BaseAdapter類(lèi)就會(huì)實(shí)現(xiàn)一些方法 這些方法可以用來(lái) 設(shè)置圖片源、獲取圖片個(gè)數(shù)、設(shè)置顯示的方式等等。
- public class ImageAdapter extends BaseAdapter
- {
- // 定義Context
- private Context mContext;
- // 定義整型數(shù)組 即圖片源
- 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;
- }
- // 獲取圖片的個(gè)數(shù)
- public int getCount()
- {
- return mImageIds.length;
- }
- // 獲取圖片在庫(kù)中的位置
- 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設(shè)置資源
- imageview.setImageResource(mImageIds[position]);
- // 設(shè)置布局 圖片120*120
- imageview.setLayoutParams(new Gallery.LayoutParams(120, 120));
- // 設(shè)置顯示比例類(lèi)型
- 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”用來(lái)設(shè)置圖片之間的間距 –>
- </Gallery>
五、介紹一個(gè)重要方法那就是requestWindowFeature(featrueId),它的功能是啟用窗體的擴(kuò)展特性。參數(shù)是Window類(lèi)中定義的常量。
枚舉常量
- 1.DEFAULT_FEATURES:系統(tǒng)默認(rèn)狀態(tài),一般不需要指定
- 2.FEATURE_CONTEXT_MENU:?jiǎn)⒂肅ontextMenu,默認(rèn)該項(xiàng)已啟用,一般無(wú)需指定
- 3.FEATURE_CUSTOM_TITLE:自定義標(biāo)題。當(dāng)需要自定義標(biāo)題時(shí)必須指定。如:標(biāo)題是一個(gè)按鈕時(shí)
- 4.FEATURE_INDETERMINATE_PROGRESS:不確定的進(jìn)度
- 5.FEATURE_LEFT_ICON:標(biāo)題欄左側(cè)的圖標(biāo)
- 6.FEATURE_NO_TITLE:吳標(biāo)題
- 7.FEATURE_OPTIONS_PANEL:?jiǎn)⒂?ldquo;選項(xiàng)面板”功能,默認(rèn)已啟用。
- 8.FEATURE_PROGRESS:進(jìn)度指示器功能
- 9.FEATURE_RIGHT_ICON:標(biāo)題欄右側(cè)的圖標(biāo)
- // 隱藏頂部程序名稱(chēng) 寫(xiě)在setContentView(R.layout.xxxx);之前,不然報(bào)錯(cuò)
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- // 隱藏狀態(tài)欄
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
六、使用MediaStore.Images和 Cursor查詢(xún)本地圖片和圖片縮略圖
先看一個(gè)實(shí)例:
- String[] projection = { MediaStore.Images.Thumbnails._ID ,MediaStore.Images.Thumbnails.DATA};
- Cursor cursor = mActivity.getContentResolver().query(
- MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,//指定縮略圖數(shù)據(jù)庫(kù)的Uri
- projection,//指定所要查詢(xún)的字段
- MediaStore.Images.Thumbnails._ID + " = ?",//查詢(xún)條件
- new String[] {"123" }, //查詢(xún)條件中問(wèn)號(hào)對(duì)應(yīng)的值
- null);
- cursor.moveToFirst();
- String id = cursor.getString(0);
- String data = cursor.getString(1);
查詢(xún)圖片縮略圖數(shù)據(jù)庫(kù),獲取id等于123的縮略圖信息。
轉(zhuǎn)換成Sql語(yǔ)句即為 select MediaStore.Images.Thumbnails._ID ,MediaStore.Images.Thumbnails.DATA from MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI where MediaStore.Images.Thumbnails._ID = 123
如果要查詢(xún)圖片,Uri地址為:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
當(dāng)要獲取縮略圖時(shí):Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail
(1)讀取SD卡上面的圖片信息
- //想要的返回值所在的列
- String[] projection = { MediaStore.Images.Thumbnails._ID};
- //圖片信息存儲(chǔ)在 android.provider.MediaStore.Images.Thumbnails數(shù)據(jù)庫(kù)
- //快速查詢(xún)數(shù)據(jù)庫(kù)中的圖片對(duì)應(yīng)存放路勁
- 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()];//把圖片路徑放在數(shù)組中
(2)將讀取的圖片生成縮略圖
- while(cursor.moveToNext()&&i<cursor.getCount())
- { //移到指定的位置,遍歷數(shù)據(jù)庫(kù)
- 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) {
- //將原來(lái)的位圖轉(zhuǎn)換成新的位圖
- newBitmap = Bitmap.createScaledBitmap(bitmap,80, 80,true);
- bitmap.recycle();//釋放內(nèi)存
- if (newBitmap != null) {
- publishProgress(new LoadedImage(newBitmap));
- }
- }
- } catch (IOException e) {}
- i++;
- }
android在處理一寫(xiě)圖片資源的時(shí)候,會(huì)進(jìn)行一些類(lèi)型的轉(zhuǎn)換,現(xiàn)在有空整理一下:
1、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;
- }
2、從資源中獲取Bitmap
- Resources res=getResources();
- Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3、Bitmap → byte[]
- private byte[] Bitmap2Bytes(Bitmap bm){
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
- return baos.toByteArray();
- }
4、 byte[] → Bitmap
- private Bitmap Bytes2Bimap(byte[] b){
- if(b.length!=0){
- return BitmapFactory.decodeByteArray(b, 0, b.length);
- }
- else {
- return null;
- }
- }
七、保存圖片到圖庫(kù)
Images.Media.EXTERNAL_CONTENT_URI這是一個(gè)系統(tǒng)圖片數(shù)據(jù)表,圖庫(kù)里面的圖片數(shù)據(jù)都是從這里面查詢(xún)出來(lái)的;調(diào)用insert就是往這個(gè)表里面插入一條數(shù)據(jù),插入成功的話,下次加載圖庫(kù),就可以把新加入的數(shù)據(jù)從這個(gè)表中查詢(xún)并展示出來(lái)了.
- Images.Media.EXTERNAL_CONTENT_URI:數(shù)據(jù)表肯定就包括一些屬性字段,如下:
- 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);
上面這些內(nèi)容的鍵值就是數(shù)據(jù)表里面的字段,當(dāng)然這并不是所有的,只是傳一些比較重要和常用的保存起來(lái);比如圖片的名稱(chēng)、時(shí)間、大小、類(lèi)型等。
八、根據(jù)Uri獲取文件絕對(duì)路徑
- protected String getAbsoluteImagePath(Uri uri)
- {
- // can post image
- String [] proj={MediaStore.Images.Media.DATA};
- Cursor cursor = managedQuery( uri,
- proj, // Which columns to return
- null, // WHERE clause; which rows to return (all rows)
- null, // WHERE clause selection arguments (none)
- null); // Order-by clause (ascending by name)
- int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
- cursor.moveToFirst();
- return cursor.getString(column_index);