zoukankan      html  css  js  c++  java
  • 转--Android学习笔记-实用代码合集

    http://blog.csdn.net/yf210yf/article/details/7295577

    转载请注明原文出处:奔跑的蜗牛(袁方的技术博客)点击打开链接

    一、当利用textview显示内容时,显示内容过多可能会折行或显示不全,那样效果很不好。今天发现android api中已经给出自动省略的功能。

    实现如下:

    1. <TextView   
    2.     android:layout_width="fill_parent"   
    3.     android:layout_height="wrap_content"   
    4.     android:id="@+id/hello"   
    5.     android:ellipsize="end"   
    6.    android:singleLine="true"   
    7. />  


    二、学习]ImageView的scaletype属性

    ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType)。android:scaleType是控制图片如何 resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别:

    1. CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截 取图片的居中部分显示  
    2.   
    3. CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽)  
    4.   
    5. CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小 或原来的size使得图片长/宽等于或小于View的长/宽  
    6.   
    7. FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示  
    8.   
    9. FIT_END / fitEnd 把 图片按比例扩大/缩小到View的宽度,显示在View的下部分位置  
    10.   
    11. FIT_START / fitStart 把 图片按比例扩大/缩小到View的宽度,显示在View的上部分位置  
    12.   
    13. FIT_XY / fitXY 把图片 不按比例 扩大/缩小到View的大小显示  
    14.   
    15. MATRIX / matrix 用矩阵来绘制  




    三、Uri与String之间的转换

    Uri u = Uri.parse("content://media/internal/audio/media/81");

    Android 通过Uri获取Bitmap对象

    1. private Bitmap getBitmapFromUri(Uri uri)  
    2.  {  
    3.   try  
    4.   {  
    5.    // 读取uri所在的图片  
    6.    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);  
    7.    return bitmap;  
    8.   }  
    9.   catch (Exception e)  
    10.   {  
    11.    Log.e("[Android]", e.getMessage());  
    12.    Log.e("[Android]", "目录为:" + uri);  
    13.    e.printStackTrace();  
    14.    return null;  
    15.   }  
    16.  }  


    四、Android图片拖动效果(Gallery及ImageAdapter用法)

    1. public class Activity01 extends Activity  
    2.     {  
    3.         /** 
    4.          * Gallery类概述(Gallery)此单词翻译过来为画廊,美术馆 一种view,以水平列表的方式显示在屏幕中央 看一眼图片就知道咋回事了 
    5.          * 此类继承了 AbsSpinner 
    6.          */  
    7.         @Override  
    8.         public void onCreate(Bundle savedInstanceState)  
    9.         {  
    10.             super.onCreate(savedInstanceState);  
    11.             setContentView(R.layout.main);  
    12.             // 获得Gallery对象  
    13.             Gallery g = (Gallery) findViewById(R.id.Gallery01);  
    14.             // 添加ImageAdapter给Gallery对象 注意哦Gallery类并没有setAdapter这个方法  
    15.             // 这个方法是从AbsSpinner类继承的  
    16.             g.setAdapter(new ImageAdapter(this));  
    17.             // 设置Gallery的背景图片  
    18.             g.setBackgroundResource(R.drawable.bg0);  
    19.             // 设置Gallery的事件监听  
    20.             g.setOnItemClickListener(new GalleryItemListener());  
    21.         }  
    22.   
    23.         class GalleryItemListener implements OnItemClickListener  
    24.         {  
    25.             public void onItemClick(AdapterView<?> parent, View view, int position,  
    26.         long id) {  
    27.         Toast.makeText(Activity01.this, ”你选择了” + (position + 1) + ” 号图片”,  
    28.         Toast.LENGTH_SHORT).show();  
    29.         }  
    30.         }  
    31.     }  


    ImageAdapter类继承自BaseAdapter类 继承BaseAdapter类就会实现一些方法 这些方法可以用来 设置图片源、获取图片个数、设置显示的方式等等。

    1. public class ImageAdapter extends BaseAdapter  
    2.     {  
    3.         // 定义Context  
    4.         private Context mContext;  
    5.         // 定义整型数组 即图片源  
    6.         private Integer[] mImageIds =  
    7.         { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4,  
    8.                 R.drawable.img5, R.drawable.img6, R.drawable.img7,  
    9.                 R.drawable.img8, };  
    10.   
    11.         // 声明ImageAdapter  
    12.         public ImageAdapter(Context c)  
    13.         {  
    14.             mContext = c;  
    15.         }  
    16.   
    17.         // 获取图片的个数  
    18.         public int getCount()  
    19.         {  
    20.             return mImageIds.length;  
    21.         }  
    22.   
    23.         // 获取图片在库中的位置  
    24.         public Object getItem(int position)  
    25.         {  
    26.             return position;  
    27.         }  
    28.   
    29.         // 获取图片ID  
    30.         public long getItemId(int position)  
    31.         {  
    32.             return position;  
    33.         }  
    34.   
    35.         public View getView(int position, View convertView, ViewGroup parent)  
    36.         {  
    37.             ImageView imageview = new ImageView(mContext);  
    38.             // 给ImageView设置资源  
    39.             imageview.setImageResource(mImageIds[position]);  
    40.             // 设置布局 图片120*120  
    41.             imageview.setLayoutParams(new Gallery.LayoutParams(120, 120));  
    42.             // 设置显示比例类型  
    43.             imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);  
    44.             return imageview;  
    45.         }  
    46.     }  


    最后布局文件.

    1. <?xml version=”1.0″ encoding=”utf-8″?>  
    2. <Gallery xmlns:android=”http://schemas.android.com/apk/res/android”  
    3. android:id=”@+id/Gallery01″  
    4. android:layout_width=”fill_parent”  
    5. android:layout_height=”fill_parent”  
    6. android:spacing=”2px”  
    7. >  
    8. <!– android:spacing=”2px”用来设置图片之间的间距 –>  
    9. </Gallery>  


    五、介绍一个重要方法那就是requestWindowFeature(featrueId),它的功能是启用窗体的扩展特性。参数是Window类中定义的常量。

       枚举常量

    1. 1.DEFAULT_FEATURES:系统默认状态,一般不需要指定  
    2. 2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定  
    3. 3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时  
    4. 4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度  
    5. 5.FEATURE_LEFT_ICON:标题栏左侧的图标  
    6. 6.FEATURE_NO_TITLE:吴标题  
    7. 7.FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。  
    8. 8.FEATURE_PROGRESS:进度指示器功能  
    9. 9.FEATURE_RIGHT_ICON:标题栏右侧的图标  


    1. // 隐藏顶部程序名称 写在setContentView(R.layout.xxxx);之前,不然报错  
    2.     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);          
    3.     requestWindowFeature(Window.FEATURE_NO_TITLE);  
    4.       
    5.     // 隐藏状态栏  
    6.     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
    7.             WindowManager.LayoutParams.FLAG_FULLSCREEN);  


    六、使用MediaStore.Images和 Cursor查询本地图片和图片缩略图

    先看一个实例:

    1. String[] projection = { MediaStore.Images.Thumbnails._ID ,MediaStore.Images.Thumbnails.DATA};  
    2. Cursor cursor = mActivity.getContentResolver().query(  
    3.     MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,//指定缩略图数据库的Uri  
    4.     projection,//指定所要查询的字段  
    5.     MediaStore.Images.Thumbnails._ID + " = ?",//查询条件  
    6.     new String[] {"123" }, //查询条件中问号对应的值  
    7.     null);  
    8. cursor.moveToFirst();  
    9. String id = cursor.getString(0);  
    10. String data = cursor.getString(1);  
    11.    


    查询图片缩略图数据库,获取id等于123的缩略图信息。

    转换成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卡上面的图片信息

    1. //想要的返回值所在的列     
    2.         String[] projection = { MediaStore.Images.Thumbnails._ID};    
    3.         //图片信息存储在 android.provider.MediaStore.Images.Thumbnails数据库      
    4.         //快速查询数据库中的图片对应存放路劲              
    5.         Cursor cursor = managedQuery(    
    6.                 MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,    
    7.                 projection, //List of columns to return :想要他返回的列     
    8.                 null, // Return all rows     
    9.                 null,    
    10.                 null);    
    11.         int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);    
    12.         uriArray = new Uri[cursor.getCount()];//把图片路径放在数组中    


    (2)将读取的图片生成缩略图

     

    1. while(cursor.moveToNext()&&i<cursor.getCount())    
    2.         {   //移到指定的位置,遍历数据库     
    3.             cursor.moveToPosition(i);    
    4.             uri = Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,cursor.getInt(columnIndex)+"");    
    5.             uriArray[i]=uri;    
    6.             try {    
    7.                 bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));    
    8.                 if (bitmap != null) {    
    9.                     //将原来的位图转换成新的位图     
    10.                     newBitmap = Bitmap.createScaledBitmap(bitmap,80, 80,true);    
    11.                     bitmap.recycle();//释放内存     
    12.                     if (newBitmap != null) {    
    13.                         publishProgress(new LoadedImage(newBitmap));    
    14.                     }    
    15.                 }    
    16.             } catch (IOException e) {}    
    17.             i++;    
    18.         }    


    android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:

    1、Drawable → Bitmap

    1. public static Bitmap drawableToBitmap(Drawable drawable) {     
    2.              
    3.         Bitmap bitmap = Bitmap     
    4.                         .createBitmap(     
    5.                                         drawable.getIntrinsicWidth(),     
    6.                                         drawable.getIntrinsicHeight(),     
    7.                                         drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888     
    8.                                                         : Bitmap.Config.RGB_565);     
    9.         Canvas canvas = new Canvas(bitmap);     
    10.         //canvas.setBitmap(bitmap);     
    11.         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());     
    12.         drawable.draw(canvas);     
    13.         return bitmap;     
    14. }    


    2、从资源中获取Bitmap

    1. Resources res=getResources();     
    2.     
    3. Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);    


    3、Bitmap → byte[]

    1. private byte[] Bitmap2Bytes(Bitmap bm){     
    2.     ByteArrayOutputStream baos = new ByteArrayOutputStream();       
    3.     bm.compress(Bitmap.CompressFormat.PNG, 100, baos);       
    4.     return baos.toByteArray();     
    5.    }   


    4、 byte[] → Bitmap

    1. private Bitmap Bytes2Bimap(byte[] b){     
    2.             if(b.length!=0){     
    3.                 return BitmapFactory.decodeByteArray(b, 0, b.length);     
    4.             }     
    5.             else {     
    6.                 return null;     
    7.             }     
    8.       }    



    七、保存图片到图库

    Images.Media.EXTERNAL_CONTENT_URI这是一个系统图片数据表,图库里面的图片数据都是从这里面查询出来的;调用insert就是往这个表里面插入一条数据,插入成功的话,下次加载图库,就可以把新加入的数据从这个表中查询并展示出来了,


    1. Images.Media.EXTERNAL_CONTENT_URI:数据表肯定就包括一些属性字段,如下:  
    2. values.put(Images.Media.TITLE, title);  
    3. values.put(Images.Media.DISPLAY_NAME, filename);  
    4. values.put(Images.Media.DATE_TAKEN, dateTaken);  
    5. values.put(Images.Media.MIME_TYPE, IMAGE_MIME_TYPE);  
    6. values.put(Images.Media.ORIENTATION, degree[0]);  
    7. values.put(Images.Media.DATA, filePath);  
    8. values.put(Images.Media.SIZE, size);  



    上面这些内容的键值就是数据表里面的字段,当然这并不是所有的,只是传一些比较重要和常用的保存起来;比如图片的名称、时间、大小、类型等。

    八、根据Uri获取文件绝对路径 


     

      1. protected String getAbsoluteImagePath(Uri uri)   
      2.   {  
      3.       // can post image  
      4.       String [] proj={MediaStore.Images.Media.DATA};  
      5.       Cursor cursor = managedQuery( uri,  
      6.                       proj,                 // Which columns to return  
      7.                       null,       // WHERE clause; which rows to return (all rows)  
      8.                       null,       // WHERE clause selection arguments (none)  
      9.                       null);                 // Order-by clause (ascending by name)  
      10.         
      11.       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  
      12.       cursor.moveToFirst();  
      13.          
      14.       return cursor.getString(column_index);  
      15.   } 
  • 相关阅读:
    使用idea15搭建基于maven的springmvc-mybatis框架
    git本地提交到远程仓库命令
    jsp表格数据导出到Execl
    FreeMarker标签介绍
    FreeMarker常用语法
    mybatis批量删除
    git之https或http方式设置记住用户名和密码的方法
    INPUT只能输入数字
    mysql 日期格式化
    cygwin配置git
  • 原文地址:https://www.cnblogs.com/awkflf11/p/4344228.html
Copyright © 2011-2022 走看看