转--Android学习笔记-实用代码合集
http://blog.csdn.net/yf210yf/article/details/7295577
转载请注明原文出处:奔跑的蜗牛(袁方的技术博客)点击打开链接
一、当利用textview显示内容时,显示内容过多可能会折行或显示不全,那样效果很不好。今天发现android api中已经给出自动省略的功能。
实现如下:
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/hello"
- android:ellipsize="end"
- android:singleLine="true"
- />
二、学习]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 用矩阵来绘制
三、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;
- }
- }
四、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();
- }
- }
- }
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(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>
五、介绍一个重要方法那就是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:标题栏右侧的图标
- // 隐藏顶部程序名称 写在setContentView(R.layout.xxxx);之前,不然报错
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- // 隐藏状态栏
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
六、使用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);
查询图片缩略图数据库,获取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()];//把图片路径放在数组中
(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在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:
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;
- }
- }
七、保存图片到图库
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);
上面这些内容的键值就是数据表里面的字段,当然这并不是所有的,只是传一些比较重要和常用的保存起来;比如图片的名称、时间、大小、类型等。
八、根据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);
- }
转--Android学习笔记-实用代码合集的更多相关文章
- Android编程实用代码合集
1.android dp和px之间转换public class DensityUtil { /** * 根据手机的分辨率从 dip 的单位 转成为 px(像素) */ public static in ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- [ZZ] UIUC同学Jia-Bin Huang收集的计算机视觉代码合集
UIUC同学Jia-Bin Huang收集的计算机视觉代码合集 http://blog.sina.com.cn/s/blog_4a1853330100zwgm.htmlv UIUC的Jia-Bin H ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
随机推荐
- C++@重载函数
关于重载详细分析参考: http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html 内部机制涉及重载函数如何解决命名冲突,调用匹配的问题 ...
- C++的异常处理
一.什么是异常处理 一句话:异常处理就是处理程序中的错误. 二.为什么需要异常处理,以及异常处理的基本思想 C++之父Bjarne Stroustrup在<The C++ Programming ...
- ps通道混合器
输出通道:红 ,加绿变黄,加蓝变品红,减红变青.输出通道:绿,加红变黄,加蓝变青,减绿变品红.输出通道:蓝,加红变品红,加绿变青,减蓝变黄[对比色]
- Linux下tmpfs介绍及使用
tmpfs介绍 tmpfs是一种虚拟内存文件系统,而不是块设备.是基于内存的文件系统,创建时不需要使用mkfs等初始化它最大的特点就是它的存储空间在VM(virtual memory),VM是由lin ...
- TKinter布局之grid 网格布局
1.由于我们的程序大多数都是矩形,因此特别适合于网格 布局,也就是 grid 布局. 2.使用 grid 布局的时候,我们使用 grid 函数,在里面指 定两个参数,用 row 表示行,用 colum ...
- webstorm修改文件,webpack-dev-server不自动编译刷新的解决办法
webstorm设置中,"Settings"--"Appearance & Behavior"--"System Settings" ...
- weblogic11g重置控制台管理员用户名/密码
weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码. 说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录例如我的做 ...
- 墨刀 手机app原型工具
https://modao.io 并且墨刀对开放项目永久免费!
- Linux下 RabbitMQ的安装与配置
以下教程摘录自互联网并做了适当修改,测试的rabbitmq 版本为:rabbitmq-server-generic-unix-3.5.6 各版本之间会有差异!!! 一 Erlang安装 Rabbit ...
- [hadoop] WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
hadoop 启动后,有警告信息: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform ...