黑马程序员安卓教程:Android手机页面之样式
黑马程序员android开发笔记及源码

01、什么是3G02、android系统简介03、android背景介绍04、android的framewor简介05、两种虚拟机的比较06、sdk的下载以及简介07、创建android模拟器08、ddms简介09、platform-tools的简介及常见adb指令10、android项目的目录结构11、android下apk安装的过程12、常见的adb指令介绍13、创建模拟器遇到的常见错误14、电话拨号器15、点击事件的四种写法16、短信发送器17、相对布局&单位介绍18、现形布局&布局的组合19、表格布局&绝对布局20、帧布局21、测试相关概念22、android下junit测试框架配置23、logcat简介24、保存文件到手机内存25、android下文件访问的权限26、保存文件到SD卡中27、分析setting源代码获取SD卡大小28、_sharePreference入门29、xml文件的序列化30、采用pull解析xml文件31、采用断电调试的方法观察pull解析的的流程32、android下创建一个sqllite数据库33、sql语句实现数据库的增删改查34、系统api实现数据库的增删改查&Sqlite3工具的使用35、数据库的事物36、listView入门37、采用layoutInflater打气筒创建一个view对象38、采用数据适配器ArryAdapter39、常用数据适配器simpleAdapter40、数据适配器总结41、内容提供者简介42、内容提供者的实现43、短信的备份44、插入一条记录到系统短信应用45、内容观察者46、获取系统的联系人信息47、保存联系人到系统通讯录48、读取联系人的一个小细节49、网络图片查看器50、anr产生的原理&如何避免51、android消息机制入门52、网络html查看器53、字符乱码问题的处理54、采用get方式提交数据到服务器55、采用post方式提交数据到服务器56、提交数据到服务器中文乱码问题的处理57、采用httpclient提交数据到服务器58、异步http框架简介&实现原理59、异步http框架提交数据到服务器60、上传文件到服务器61、smartimageview&常见开源代码62、多线程下载的原理63、多线程断点下载的原理64、多线程java代码移植到android65、多线程下载文本页面的更新66、显示意图激活另一个activity67、隐式意图激活另一个activity68、隐式意图的配置69、隐式意图和显示意图的使用场景70、在不同activity之间数据传递71、activity的声明周期72、activity的启动模式73、activity横竖屏切换的声明周期74、开启新的activity获取他的返回值75、请求码和结果码的作用76、利用广播实现ip拨号77、短信窃听器78、自定义广播时间&发送自定义广播&广播接受者优先级79、采用服务执行长期后台操作80、采用服务窃听电话&服务的声明周期81、android进程优先级&为什么使用服务82、绑定方式开启服务&调用服务的方法83、服务的声明周期(混合开启84、采用aidl绑定远程服务85、代码注册广播接受者&利用广播调用服务的办法86、加载大图片到内存87、获取图片exif信息88、从gallery获取图片89、图片画画板90、扒开美女衣服91、图片的缩放92、图片的旋转93、图片的平移&镜面&倒影效果94、图片的合成95、图片的颜色处理96、多媒体播放api简介97、人脸识别98、mediaplayer的生命周期99、soundpoo简介100、sufaceview的生命周期101、播放在线视频102、视频播放器进度的处理103、调用系统照相机拍照和录像104、采用camera拍照105、常见对话框106、notification入门107、菜单108、android下的样式109、android下的主题110、代码编写ui111、html创建ui112、帧动画113、代码创建创建的tween动画114、xml文件定义动画115、传感器简介116、117、杀死进程118、apk的安装119、应用程序的反编译120、动态创建fragment121、用fragment创建一个选项卡122、fragment的向下兼容性123、fragment的生命周期124、fragment之间的通讯125、应用程序国际化04、android的framewor简介Wap:wait and playWireless Makeup Language(WML)精简的html语言Applications:android自带的基本上层应用Aplication framework:应用程序框架Librarics:Linux lernel:05、两种虚拟机的比较编译后文件格式:jvm:.java->.class->.jardalvik vm:.java->.dex->.odex基于的架构:jvm:基于栈的架构dalvik vm:基于寄存器的架构Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高06、sdk的下载以及简介->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容Android->SDK Plateform:开发时使用到的jar包->Samples for sdk:->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API ->source for android SDK:SDK全部的源代码Extrals:->tools:开发的工具->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息->gongle play service:收费服务->google USB Driver:真实的设备驱动开发时:基于4.0,兼容2.2、2.3.307、创建android模拟器avd:android virture developerVGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)08、ddms简介ddms:模拟器不支持中文,因此发送中文会显示不出来09、platform-tools的简介及常见adb指令Android调试桥:内部实现就是socket让两个系统之间实现数据交互->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥dx.bat:将.class文件打包10、android项目的目录结构一:SDK的目录结构->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见相应的代码->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容->mark project as a library:一般不选择,意思是将这个项目提供一个jar包供别人使用三:文件夹目录.setting:设置目录assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的apk中bin:gen:自动生成的目录->builderConfig.java:生成的配置信息->R.java:Android 4.1.2->android.jar开发环境,jar包可以在properties中修改,jar包就是SDK011、Android下apk的安装过程一、Android安装过程分析:->setContentView:甚至view的对象,把里面的xml文件加载到->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件->apk压缩文件解压内部内容->META-INF:应用程序的签名eclipse的调试签名文件->res:资源文件->classes.dex:class文件->resources.arsc:资源ID映射->android软件安装的过程:->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名012、常见adb指令前提:->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;->设备上打开USB调试;指令:->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb -s emulator-5554 install c:\\users\\administrator\\hello.apk如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端ls:显示文件夹ps:显示正在运行的程序ping:网络连通性013、创建模拟器遇到的常见错误->路径最好不要有中文:->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。
黑马程序员安卓教程:手机影音-平滑滚动歌词

手机影音-平滑滚动歌词平滑滚动歌词的算法如图4.3。
图4.3计算时使用的已播放时间和播放总时间需要从roll 方法中获取。
1./** 绘制多行文本*/2.private void drawMutiLineText(Canvas canvas){3.Lryiclryic=lryics.get(currentLine);4.intendStartPoint;5.//变化位置=居中行位置+偏移位置6.//偏移位置=移动百分比*行高7.//移动时间百分比=移动时间/可用时间8.//可用时间=下一段的时间-本段的时间9.//移动时间=已播放时间-起始时间10.if (currentLine==lryics.size()-1){11. //最后一行12. endStartPoint=mDuration;13.}else{14. LryicnextLryic=lryics.get(currentLine+1);15. endStartPoint=nextLryic.getStartPoint();16.}17.intmoveTime=mPosition-lryic.getStartPoint();18.intuseTime=endStartPoint-lryic.getStartPoint();19.floatmovePercent=moveTime/(float)useTime;20.intoffset=(int) (movePercent*lineHeight);21.//获取高亮行Y 的位置22.Rect bounds=new Rect();23.//计算text 的宽和高24.paint.getTextBounds(lryic.getContent(),0,lryic.getContent().length(),bounds);25. // inthalfTextW=bounds.width()/2;26. inthalfTextH=bounds.height()/2;27. // canvas.translate(0,-offset);28.intcenterY=halfTextH+halfViewH-offset;29.//按行绘制文本30.for(inti= 0; i < lryics.size();i++){31. if (currentLine==i){32. paint.setColor(hightLightColor);33. paint.setTextSize(hightlightSize);34. }else{35. paint.setColor(normalColor);36. paint.setTextSize(normalSize);37. }38. //y= 居中行Y 的位置+( 绘制行的行数- 高亮行的行数)* 行号39. int downY=centerY+(i-currentLine)*lineHeight;40. //x= 水平居中使用的x41. drawHorizontalText(canvas,lryics.get(i).getContent(),downY);42.}43.}运行结果:。
黑马程序员安卓教程:意图设计的目的

黑马程序员安卓教程:意图设计的目的Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。
使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。
下面我们通过一个案例来了解Intent的作用:1.新建工程【File】→【new】→【Android Application Project】命名为:02_黑马浏览器。
2.编写布局根据需求编写布局文件,效果如图1-1所示:图1-1所示图1-1对应的xml布局文件如例1-1:例1-1从例1-1可知:在该布局文件中定义了一个TextView,用来展示静态文本信息;定义了一个WebView 用来展示网页。
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器(其内部使用了WebKit渲染引擎)。
对于WebView我们需要知道:它和其他的控件(Button,EditText)不同,参考API文档如图1-2所示:图1-2所示从图1-2可知:WebView不是在android.weight中,而是在android.webkit中。
3.查找相关控件在Activity中根据ID查找相关控件,代码如例1-2所示:4.加载页面WebView可以看成一个浏览器,在浏览器加载网页时我们需要传递一个URL地址,同理使用WebView加载网络页面时也需要一个URL地址;浏览器加载网页时我们还可以设置该浏览器的参数,如清理缓存等,所以在WebView加载网页时,我们也可以做一些参数的设置。
如何设置WebView的参数信息,Google给我们提供了一个组件WebSettings。
如例1-3是相关参数的设置:例1-3例1-3通过WebView的getsetting方法返回一个该WebView实例的WebSettings,然后调用WebSettings的set方法来设置一系列的参数。
黑马程序员安卓教程:Uri详解

Uri详解在Intent传递数据时,我们不仅可以使用Intent的putExtra()方法,还可以调用Intent的setData()方法。
下面我们通过一个Demo来了解其setData方法。
1.新建工程【File】→【new】→【Android Application Project】命名为:03_setData的语法,效果如图1-1所示:图1-1所示图1-1所对应的xml布局文件代码如例1-1:例1-1可知:当点击按钮时跳转到第二个页面,同时传递数据到这个新页面。
2.新建另一个Activity编写跳转页面,即新建一个Activity命名为:SecondActivity。
此时工程目录结构如图1-2所示:图1-2所示3.声明Activity新建Activity为SecondActivity,此时我们需要在该工程的清单文件中声明该新建的Activity。
在清单文件的<application>节点下,声明该Activity,代码下例1-2:例1-2例1-2在声明SecondActivity的意图过滤器时我们如往常一样配置了该意图过滤器的动作action,动作的数据对象data,类别category。
在声明data节点时,我们需要定义该data的scheme属性,host属性,port属性,path属性。
4.编写点击事件编写主Activity的点击事件,在该点击事件中执行跳转,代码如例1-3:例1-3调用Intent的setData方法设置数据时,该方法的参数类型是一个Uri(体现了这个方法的局限性),所以要将数据通过该函数传递时,记得要把数据转化为uri,如Uri.fromFile(File file),Uri.parse(String string)。
运行程序,效果如图1-3所示:点击事件跳转图1-3所示logcat打印如图1-4的信息:图1-4所示图1-4说明:在第二个页面中接收到了第一个页面传递过来的String类型的数据。
黑马程序员安卓教程:案例-网络图片查看器

案例-网络图片查看器通过该案例可以学习如何将网络图片显示在到用户界面。
需求如图1-3,在编辑框输入图片的url地址,然后点击右侧的确定按钮。
然后app就开始访问网络,将网络上的图片显示在界面。
图1-3 网络图片查看器编写布局【文件1-5】activity_main.xml1.<LinearLayout xmlns:android="/apk/res/android"2.xmlns:tools="/tools"3.android:layout_width="match_parent"4.android:layout_height="match_parent"5.android:orientation="vertical">6.7.<LinearLayout8. android:layout_width="match_parent"9. android:layout_height="wrap_content"10. android:orientation="horizontal" >11.12. <EditText13. android:id="@+id/et_url"14. android:layout_width="0dp"15. android:layout_height="wrap_content"16. android:layout_weight="1"17. android:text="/data/attachment/forum18. /201511/04/121947sci9qd732yyyyyh4.jpg"19. android:hint=" 请输入url 地址" />20.21. <Button22. android:layout_gravity="center_vertical"23. android:layout_width="wrap_content"24. android:layout_height="wrap_content"25. android:onClick="load"26. android:text=" 确定" />27. </LinearLayout>28.29.<ImageView30. android:layout_gravity="center_horizontal"31. android:id="@+id/iv"32. android:layout_width="wrap_content"33. android:layout_height="wrap_content" />34.35.</LinearLayout>注意:上面第17行布局代码中我将一个网络图片的地址“写死”了,因为图片地址的url太长了,因此仅仅为了方便演示才这么做的。
黑马程序员安卓教程:Sharedpreference存储配置信息之保存checkbox的状态

SharedPreferences存储配置信息之保存checkbox状态Android系统可以设置声音的大小,当前的系统模式,是否开启静音模式等,这些设置信息都保存在哪里呢?Google工程师提供了一个API即SharedPreferences(参数类型),并用来存储用户的配置信息。
1.编写布局文件创建一个应用(命名为:调整声音),并设计UI,在页面的有一个CheckBox勾选框,当选中时则开启声音,否则关闭声音;在该页面中还有一个seekbar滚动条,可以左右滚动用来调整当前声音音量的大小。
打开新建项目的布局文件,拖相关控件到该布局文件中,效果如图1-1所示:图1-1所示上图布局文件可以看成是一个垂直方向线性布局包含了一个相对布局以及两个子控件,下图1-2为相对布局的代码:<RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="是否开启声音"android:layout_marginTop="10dip"android:layout_marginLeft="5dip"android:textSize="20sp"/><CheckBoxandroid:id="@+id/cb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"/></RelativeLayout>图1-2所示2.查找相关控件在住Activity中,我们所用到的控件有checkbox和seekbar,通过定义这两个控件的id 在Activity中查找到相关控件,如例1-3所示:例1-3cb=(CheckBox) findViewById(R.id.cb);sb=(SeekBar) findViewById(R.id.sb);3.添加监听事件可以通过点击事件来使Checkbox的状态来回的切换,在android中我们可以监听其状态变化的点击事件,具体代码如例1-4所示:例1-4cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// TODO Auto-generated method stub}});从上例可以看出,当勾选状态发生变化时便会调用onCheckedChanged(CompoundButton buttonView, boolean isChecked)方法,该方法的第一个参数代表当前的checkbox,第二个参数代表checkbox是否被选中。
黑马程序员安卓教程:Android 中服务的调用案例-音乐播放器
Android 中服务的调用案例-音乐播放器一、需求通过该案例,我们可以更加直观地感受 Bound Service 的使用方法。
在后台(Service )运行播放音乐服务,在界面(Activity )控制音乐播放器。
音乐播放器原型图如图 1-7所示。
因为要播放音乐,因此需要提前准备一个音频文件,然后我把该文件放到 res 下的 raw 目录下,注意,raw 目录需要我们手动创建,该文件名字必须为 raw ,这是约定好的,如图 1-8 所示。
图 1-7音乐播放中界面图 1-8创建 raw 目录二、布局布局很简单,如下所示。
【文件 1-6】activity_main.xml1.<LinearLayout xmlns:android="/apk/res/android" 2. xmlns:tools="/tools" 3. android:layout_width="match_parent" 4. android:layout_height="match_parent" 5. android:orientation="vertical"6.tools:context=".MainActivity" >247.8.<TextView9.android:layout_width="wrap_content"10.android:layout_height="wrap_content"11.android:layout_gravity="center_horizontal"12.android:text="音乐播放器"13.android:textColor="#ff0000"14.android:textSize="28sp" />15.16.<LinearLayout17.android:layout_width="match_parent"18.android:layout_height="wrap_content"19.android:orientation="horizontal">20.21.<Button22.android:id="@+id/bt_play"23.android:layout_width="0dp"24.android:layout_height="wrap_content"25.android:layout_weight="1"26.android:onClick="play"27.android:text="播放" />28.29.<Button30.android:id="@+id/bt_pause"31.android:layout_width="0dp"32.android:layout_height="wrap_content"33.android:layout_weight="1"34.android:onClick="pause"35.android:text="暂停" />36.37.<Button38.android:id="@+id/bt_stop"39.android:layout_width="0dp"40.android:layout_height="wrap_content"41.android:layout_weight="1"42.android:onClick="stop"43.android:text="停止" />44.</LinearLayout>45.<ProgressBar46.android:layout_width="match_parent"47.android:layout_height="wrap_content"48.style="?android:attr/progressBarStyleHorizontal"49.android:id="@+id/pb"50./>51.</LinearLayout>25三、代码在该案例中使用到了两个类,一个是自定义的Service,用于播放音乐。
黑马程序员安卓教程:图片颜色处理案例之美图秀秀
图片颜色处理案例之美图秀秀我们在之前的文档中已经阐述了图片色彩处理的原理,下面我们将通过一个具体的DEMO来进一步学习图片颜色处理的编写。
工程需求:仿美图秀秀对图片颜色的处理,在Android下设置图片RGB的值,然后编辑图片的颜色效果。
1.新建工程【File】→【new】→【Android Application Project】命名为:10_android版美图秀秀2.编写布局根据需求设计布局页面,效果如图1-1所示:ImageView图1-1所示图1-1对应的xml布局页如例1-1:例1-1可知:当用户滑动seekbar时,滑到的位置便对应着不同的RGB值,图片的颜色便会根据这个值来做不同的调整。
3.查找控件在Activity中根据控件的ID来查找相关的控件,代码如例1-2所示:4.生成副本读取指定路径下的图片,创建原图的副本,然后将这个副本部署在ImageView控件上。
创建副本的代码我们在之前的代码中已经讲述过,在此不做过多讲解。
代码如例1-3所示:运行程序,效果如图1-2所示:图1-2所示由图1-2可知:图片副本已经生成;进度条显示当前进度为128,而进度条的最大进度值是256。
5.监听SeekBar为了编写简洁,我们可以使当前Activity实现SeekBar的OnSeekBarChangeListener接口,然后重写该onStopTrackingTouch方法。
代码如例1-4所示:例1-46.设置监听给每一个SeekBar注册监听事件,代码如例1-5所示:运行程序,效果如图1-3所示:图1-3所示图1-3可知:当滑动进度条时,色彩矩阵就会随之改变,最后整个图片的色彩也会随之变动。
黑马程序员安卓教程:图片特效处理
图片特效处理图片的特效包括图形的缩放、镜面、倒影、旋转、平移等。
图片的特效处理方式是将原图的图形矩阵乘以一个特效矩阵,形成一个新的图形矩阵来实现的。
矩阵Matrix类,维护了一个3*3的矩阵去更改像素点的坐标。
Android 手机的屏幕坐标系如下图所示。
横轴是X 坐标轴,从左往右变大,纵轴是Y 坐标轴,从上往下变大,坐标原点位于屏幕的左上角,用(0,0)表示。
6图1-2 屏幕坐标系图形的矩阵用数组表示为:{ 1, 0, 0, 第一行表示像素点的x 坐标:x = 1*x + 0*y + 0*z 0, 1,0, 第二行表示像素点的y 坐标:y = 0*x + 1*y + 0*z 0, 0, 1 }第三行表示像素点的z 坐标:z = 0*x + 0*y + 1*z图片的特效处理正是通过更改图形矩阵的值来实现的,下面分别给出各种特效实现的代码,在代码中会有详细的注释。
1.2.1准备工作创建一个Android工程“02-图片特效”,准备一张原始图片,然后在该应用界面水平放置缩放、平移、镜面、倒影、旋转等5个按钮,点击不同的按钮,在原始图正下方显示处理后的图片效果。
效果如图1-3所示。
图1-3 图片特效原始图7布局文件如下所示:【文件1-2】activity_main.xml1.<LinearLayout xmlns:android="/apk/res/android"2.xmlns:tools="/tools"3.android:layout_width="match_parent"4.android:layout_height="match_parent"5.android:orientation="vertical">6.7.<LinearLayout8.android:layout_width="match_parent"9.android:layout_height="wrap_content"10.android:orientation="horizontal"11.>12.<Button13.android:layout_width="0dp"14.android:layout_weight="1"15.android:layout_height="wrap_content"16.android:text="缩放"17.android:onClick="scale"18./>19.20.<Button21.android:layout_weight="1"22.android:layout_width="0dp"23.android:layout_height="wrap_content"24.android:text="平移"25.android:onClick="translate"26./>27.28.<Button29.android:layout_weight="1"30.android:layout_width="0dp"31.android:layout_height="wrap_content"32.android:text="镜面"33.android:onClick="mirror"34./>35.36.<Button37. android:layout_width="0dp"38. android:layout_weight="1"39. android:layout_height="wrap_content"40. android:text=" 倒影"41. android:onClick="invert"42. />843. <Button44. android:layout_width="0dp"45. android:layout_weight="1"46. android:layout_height="wrap_content"47. android:text=" 旋转"48. android:onClick="rotate"49. />50.51.</LinearLayout>52.53.<ImageView54.android:layout_gravity="center_horizontal"55.android:layout_width="wrap_content"56.android:layout_height="wrap_content"57.android:src="@drawable/logo"58./>59.<ImageView60.android:id="@+id/iv"61.android:layout_gravity="center_horizontal"62.android:layout_width="wrap_content"63.android:layout_height="wrap_content"64./>65.66.67.</LinearLayout>。
黑马程序员安卓教程:SimpleAdapter与旋转
黑马程序员安卓教程:SimpleAdapterSimpleAdapter 可以实现比ArrayAdapter 复杂一点的布局。
使用SimpleAdapter 的数据一般都是HashMap构成的List,List的每一个对象对应ListView的每一行。
HashMap的每个键值数据映射到布局文件中对应id 的组件上。
因为系统没有对应的布局文件可用,我们可以自己定义一个布局文件。
在本节中我们用TextView和ImageView组合作为布局以演示SimpleAdapter的用法。
ListView的条目布局如图1-10图1-10 ListView条目布局【文件1-28】list_item.xml1. <?xml version="1.0"encoding="utf-8"?>2. <LinearLayout xmlns:android="/apk/res/android"3. android:layout_width="match_parent"4. android:layout_height="wrap_content"5. android:orientation="horizontal"6. >7.8. <ImageView9. android:id="@+id/iv_icon"10. android:layout_width="wrap_content"11. android:layout_height="wrap_content"12. android:src="@drawable/ic_launcher" />13.14. <TextView15. android:id="@+id/tv"16. android:textSize="26sp"17. android:layout_width="wrap_content"18. android:layout_height="wrap_content"19. android:layout_gravity="center_vertical"20. android:text="城市" />21.22. </LinearLayout>【文件1-29】SimpleAdapter 代码1. ListView listView = (ListView) findViewById(R.id.lv);2. //创建List 集合3. List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();4. String[] from = new String[]{"icon","tv"};5. int[] to = new int[]{R.id.iv_icon,};6. //往map1 集合中添加数据7. HashMap<String, Object> map1 = new HashMap<String, Object>();8. map1.put(from[0],R.drawable.beijing);9. map1.put(from[1], "北京");10. //将map1 添加到集合11. data.add(map1);12. //往map2 集合中添加数据13. HashMap<String, Object> map2 = new HashMap<String, Object>();14. map2.put(from[0], R.drawable.shanghai);15. map2.put(from[1], "上海");16. //将map2 添加到集合17. data.add(map2);18.19. /**20. * 第一个参数:上下文21.* 第二个参数:22. * 第三个参数:布局文件的资源id23. * 第四个参数:Map 集合中key 的数组24. * 第五个参数:list_item 布局中TextView 的控件的id25. */26. SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,27. yout.list_item, from, to);28. listView.setAdapter(simpleAdapter);运行结果如图1-11图1-11 SimpleAdapter效果图黑马程序员安卓教程:旋转1. /**2. * 旋转3. * @param view4. */5. public void rotate(View view){6. // 获取原图7. Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.logo);8. // 创建一个新的Bitmap 对象,宽高跟原始图片保持一致9. Bitmap newBm = Bitmap.createBitmap(bm.getWidth(),10. bm.getHeight(), Config.ARGB_8888);11. Canvas canvas = new Canvas(newBm);12. Matrix matrix = new Matrix();13. // 算出图片的x 轴中心坐标14. int pointX = bm.getWidth() / 2;15. // 算出图片y 轴中心坐标16. int pointY = bm.getHeight() / 2;17. // 顺时针旋转30 度18. /**19. * 旋转是相对于当前图片的,因此中心点就是当前图片宽和高的1/2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android手机页面之样式
Web项目中,我们通过CSS来定义样式,在Android开发中我们也可以定义样式,然后在需要该样式的地方直接引用这个样式文件即可。
下面我们将要讲述的是Android下样式的编写方法。
1.样式的定义
新建一个工程,命名为:05_样式。
在该工程下,新建一个样式文件style.xml。
如图1-1所示:
图1-1所示
图1-1在资源目录的values下新建一个资源文件styles.xml,文件的命名是自定义的,但习惯以styles 命名。
2.样式的编写
在新建的样式文件styles.xml中编写样式,本例中我们编写TextView的样式,在编写中主要定义该TestView字体的大小,字体的颜色以及该控件的高和宽。
代码如例1-1所示:
<?xml version="1.0"encoding="utf-8"?>
<resources xmlns:android="/apk/res/android"> <style name="my_textview_style">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00ff00</item>
<item name="android:textSize">25sp</item>
</style>
</resources>
此时,在R文件中自动生成了对应的资源ID,如图1-2所示:
图1-2所示
3.样式的引用
在布局文件中,如何引用我们已经定义好的样式,代码如例1-2所示:
例1-2
<RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
style="@style/my_textview_style"
android:text="哈哈,样式的定义"/>
</RelativeLayout>
此时,布局效果如图1-3所示:
图1-3所示
4.样式的继承
在样式文件中,我们也可以实现样式的继承,Android中有以下两种不同的写法,具体如下:➢第一种写法,也是最合理的写法,代码如例1-3:
例1-3
<?xml version="1.0"encoding="utf-8"?>
<resources xmlns:android="/apk/res/android"> <style name="my_textview_style">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00ff00</item>
<item name="android:textSize">25sp</item>
</style>
<style name="my_textview_stylesmall"parent="my_textview_style">
<item name="android:textSize">17sp</item>
</style>
例1-3在定义第二个样式时,指定了其继承的父类my_textview_style,并重写了文本的大小。
➢第二种写法,虽然可行但不推荐使用,代码如例1-4:
</style>
<style name="my_textview_style.my_textview_verylarge">
<item name="android:textSize">45sp</item>
</style>。