Android学习笔记-实用代码合集

移动开发 Android
学习编程,最好的最快的方式,就是先阅读大量源代码,学习、借鉴,吸收,拿来主义,融会贯通,再加工,化为己用 —— 师夷长技以自强。

本文为大家整理了Android学习实用代码合集,希望对大家有所帮助。

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

实现如下:

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

二、学习]ImageView的scaletype属性

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

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 用矩阵来绘制   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

三、Uri与String之间的转换

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

Android 通过Uri获取Bitmap对象

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;   
  }   
 }   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

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

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();   
        }   
        }   
    }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

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

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(120120));   
            // 设置显示比例类型   
            imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);   
            return imageview;   
        }   
    }   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

***布局文件.

<?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>   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

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

枚举常量

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:标题栏右侧的图标  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

 

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

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

先看一个实例:

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);  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

查询图片缩略图数据库,获取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卡上面的图片信息

//想要的返回值所在的列      
        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()];//把图片路径放在数组中    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

(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,8080,true);     
                    bitmap.recycle();//释放内存      
                    if (newBitmap != null) {     
                        publishProgress(new LoadedImage(newBitmap));     
                    }     
                }     
            } catch (IOException e) {}     
            i++;     
        }   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

 

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

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(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());      
        drawable.draw(canvas);      
        return bitmap;      
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

2、从资源中获取Bitmap

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

3、Bitmap → byte[]

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

4、 byte[] → Bitmap

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

七、保存图片到图库

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);   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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

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

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);  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

原文链接:http://blog.csdn.net/yf210yf/article/details/7295577

责任编辑:闫佳明 来源: oschina
相关推荐

2022-06-12 06:48:34

Python代码脚本

2021-07-05 15:35:47

Vue前端代码

2011-06-03 13:11:19

Android Activity

2019-01-11 18:36:54

开发者技能代码

2011-09-09 13:59:17

Android wid

2011-04-12 17:16:52

Activity跳转开发实例Android学习笔记

2020-12-16 10:11:50

开发技能工具

2009-11-16 13:18:10

PHP上传图片代码

2011-09-07 10:34:48

Android Wid

2011-09-07 11:15:25

2013-08-02 11:04:05

Android项目

2010-07-30 13:08:38

Flex调用JavaS

2011-04-08 09:46:28

Layout.xmlAndroid

2011-05-30 14:00:35

Android Activity Intent

2011-03-30 17:32:28

androidmaniAndroid开发

2020-02-06 11:18:34

开发技能代码

2010-08-17 16:36:06

IE8兼容代码

2010-03-18 16:02:50

Java单任务延迟

2010-02-05 14:48:04

Android手机操作

2010-02-07 11:22:17

Android OS
点赞
收藏

51CTO技术栈公众号