一.样式和主题style
使用:对于在布局文件中重复出现的属性值定义在style内,可以被多个控件共同调用使用
注意:style文件内与控件内出现相同的属性不同的值,控件中的值会覆盖掉style文件中的值
1.使用方法
在values\下的style.xml文件中按照如下方式书写,即可通过name属性值调用这个配置
<style name="myStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:text">@string/hello_world</item>
<item name="android:textSize">20sp</item>
<item name="android:textColor">#f00</item>
<item name="android:layout_marginTop">10dp</item>
</style>
调用方式如下:记得,这个style同时可以被界面作为主题调用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<TextView
style="@style/myStyle"
/>
<TextView
style="@style/myStyle"
/>
<TextView
style="@style/myStyle"
/>
<TextView
style="@style/myStyle"
/>
</LinearLayout>
二.应用程序的国际化
方法:只要在res目录下创建【values-国际简称】的目录,如【values-en】,程序中需要的字符串都做成引用的方式即可
技巧:IE浏览器==>【工具菜单】==>【Internet选项】==>【语言按钮】==>【添加按钮】,即可查看所有国家的国际简称
三.动画
1.帧动画
前言:可在文档中的【Animation and Graphics】==>【Drawable Animation】栏目下查看帧动画说明,并且其中有实例代码
1.1 建立帧动画的配置文件
使用:在res目录下创建【drawable目录】,然后再这个目录下创建包含【animation-list】节点的xml文件,名称自拟,如下:
注意:用到的图片要放在drawable目录下,不要放在图片目录下
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"><!-- onshot:只显示一次 -->
<item android:drawable="@drawable/girl_1" android:duration="200" /><!-- drawable:图片 duration:一帧显示的时常 -->
<item android:drawable="@drawable/girl_2" android:duration="200" />
<item android:drawable="@drawable/girl_3" android:duration="200" />
</animation-list>
1.2 建立播放动画的布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/iv_zhenanim"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
1.3 执行动画的逻辑
ImageView iv_zhenanim = (ImageView) findViewById(R.id.iv_zhenanim);
iv_zhenanim.setBackgroundResource(R.drawable.anim);
AnimationDrawable anim = (AnimationDrawable) iv_zhenanim.getBackground();
anim.start();
2.补间动画
2.1 透明动画( Alpha)
//1.0意味着完全不透明,0代表完全透明
AlphaAnimation alpha = new AlphaAnimation(0,1);
alpha.setDuration(2000);//设置时长
alpha.setRepeatCount(3);//动画的重复次数,实际次数为3+1=4次
alpha.setRepeatMode(AlphaAnimation.REVERSE);//重复模式,前后两次效果完全相反
//开启动画的方法是View对象的方法
iv_aim.startAnimation(alpha);
2.2 旋转动画( Rotate)
//表示顺时针旋转360度,以控件左上角的点为旋转点。
RotateAnimation rotate = new RotateAnimation(0 ,360);
//表示顺时针旋转360度,后四个参数分别表示相对于自己还是父窗体,相对于哪个坐标点(横坐标是自己的一半,纵坐标是自己的一半这个点,以这个旋转)
RotateAnimation rotate1 = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
2.3 缩放( Scale)
//前四个参数表示横纵坐标发达缩小的比例,后四个参数制定了缩放点
ScaleAnimation scale = new ScaleAnimation(0.2f, 2, 0.2f, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
2.4 位移( Translate)
//前4个参数表示X方向从哪点到哪点,后4个参数表示Y方向从哪点到哪点
TranslateAnimation transalte = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
2.5 动画合集
//动画集合构造时可以通过布尔类型的参数来判定是否使用插补器
AnimationSet set = new AnimationSet(false);
//可以向动画集合中添加多个动画,多个动画会同时执行
set.addAnimation(transalte);
iv_aim.startAnimation(set);
2.6 Xml生成动画
(1)四种动画的Xml文件
<!-- 渐变动画 -->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="1.0"
android:repeatCount="2"
android:repeatMode="reverse"
android:toAlpha="0" >
<!-- 调用这个动画通过AnimationUtils.loadAnimation(context,id)来获取该动画的对象 -->
</alpha>
<!-- 旋转动画 -->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%p"
android:pivotY="50%p"
android:repeatCount="2"
android:repeatMode="restart"
android:toDegrees="360" >
<!-- pivotX和pivotY的值是相对于父亲的50% -->
</rotate>
<!-- 缩放动画 -->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXScale="0.1"
android:fromYScale="0.1"
android:repeatCount="2"
android:repeatMode="reverse"
android:toXScale="2.0"
android:toYScale="2.0" >
</scale>
<!-- 位移动画 -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="-50%p"
android:fromYDelta="-50%"
android:repeatCount="2"
android:repeatMode="restart"
android:toXDelta="50%p"
android:toYDelta="50%p" >
</translate>
(2)如何在代码中运行Xml动画
Animation shake = AnimationUtils.loadAnimation(context,xml动画索引值——R.anim.shake);
3.属性动画
3.1 ObjectAnimator终类
特点:位置大小会真的变化,API11——3.0出现的新特性
四中动画的属性值:【位移】————translationX,translationY,rotation,rotationX,rotationY,scaleX,scaleY,alpha
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
static <T> ObjectAnimator |
ofFloat(T target,
Property<T,
Float> property, float... values)
初始化属性动画对象,变化数值是float.参数1:作用的控件;参数2:动画的属性值,属性值是控件已经设置好的,可以通过控件的set方法查看;参数3:存储了动画移动的到的坐标,变换的数值
| ||||||||||
static <T> ObjectAnimator |
ofInt(T target,
Property<T,
Integer> property, int... values)
初始化属性动画对象,变化数值是int.参数和上边相同
|
3.2 AnimatorSet终类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AnimatorSet |
setDuration(long duration)
设置动画集合运行的时长
| ||||||||||
void |
setTarget(
Object target)
设置动画集合作用的控件
| ||||||||||
void |
playTogether(
Animator... items)
设置动画集合作用的控件
| ||||||||||
void |
playSequentially(
Animator... items)
封装动画动集合并且全部动画是按照顺序运行的
| ||||||||||
void |
start()
运行动画集合中的动画
|
3.3 Xml创建属性动画
(1)首选在res目录中创建animator目录
(2)然后创建属性动画的xml文件
<animator>
<objectAnimator
android:propertyName="translationY"------------属性值
android:duration="2000"-----------运行时间
android:valueFrom="10"
android:valueTo="100">
</objectAnimator>
</animator>
(3)通过以下方式加载
ObjectAnimator oa = (ObjectAnimator)AnimatorInflater.loadAnimator(this,R.animator.manimator);//动画索引id值
oa.setTarget(iv);
oa.start();
4.值动画
注:值动画按理说不应该这样单划分出来,它只是属性到基类,几种属性动画都是调整值动画的数值来实现各种动画效果的
问题:值动画API是11以上的,如何才能实现向下兼容?
<1>.自定义一个ValueAnimator对象
<2>.使用第三方jar包实现
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
static ValueAnimator |
ofFloat(float... values)
初始化值动画对象,并且控制值动画变化的值。参数:传入多个指定变化的值域
| ||||||||||
static ValueAnimator |
ofInt(int... values)
初始化值动画对象,并且控制值动画变化的值。参数:传入多个指定变化的值域
| ||||||||||
void |
addUpdateListener(
ValueAnimator.AnimatorUpdateListener listener)
设置值动画值变化的监听
| ||||||||||
Object |
getAnimatedValue()
设置值动画值变化的监听
| ||||||||||
abstract Animator |
setDuration(long duration)
设置动画执行的时间
| ||||||||||
void |
start()
开始动画
|
四.提示框
1.AlertDialog.Builder静态类
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AlertDialog.Builder(
Context context)
初始化提示框,context必须接受Activity获取子类
| |||||||||||
AlertDialog.Builder(
Context context, int theme)
初始化,特性同上,主题值在AliertDialog类中
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AlertDialog |
create()
返回此Builder所建立的Dialog对象,只有Dialog对象有dismiss方法
| ||||||||||
Context |
getContext()
获取上下文
| ||||||||||
AlertDialog.Builder |
setMessage(int messageId)
设置提示信息,设置了提示信息就不要再设置其中的内容,如setView和set单选框信息
| ||||||||||
AlertDialog.Builder |
setTitle(
CharSequence title)
设置标题头
| ||||||||||
AlertDialog.Builder |
setIcon(
Drawable icon)
设置提示框通过Drawable对象
| ||||||||||
AlertDialog.Builder |
setIcon(int iconId)
设置提示框的图标通过图片id值
| ||||||||||
AlertDialog.Builder |
setView(
View view)
设置填充的布局文件
| ||||||||||
AlertDialog |
show()
显示对象框,与Toast的show方法类似
| ||||||||||
AlertDialog.Builder |
setPositiveButton(
CharSequence text,
DialogInterface.OnClickListener listener)
设置提示框的确认按钮
| ||||||||||
AlertDialog.Builder |
setNegativeButton(
CharSequence text,
DialogInterface.OnClickListener listener)
设置提示框的取消按钮
| ||||||||||
AlertDialog.Builder |
setSingleChoiceItems(
CharSequence[] items, int checkedItem,
DialogInterface.OnClickListener listener)
设置单选框,items:表示填充单选框的数组,checkeditem:表示打开是默认选中位置的索引,listener:选择监听器
| ||||||||||
AlertDialog.Builder |
setMultiChoiceItems(
CharSequence[] items, boolean[] checkedItems,
DialogInterface.OnMultiChoiceClickListener listener)
设置多选框,items:多选框条目,checkedItems:多选框所有条目的选中信息,listener:选择监听器
| ||||||||||
AlertDialog.Builder |
setCancelable(boolean cancelable)
设置为false,会禁止提示框被返回键取消,不过最好不要用这一个功能,用户体验太差
| ||||||||||
AlertDialog.Builder |
setOnCancelListener(
DialogInterface.OnCancelListener onCancelListener)
设置返回的一个监听者,只要你一一点击返回就会触发监听者的某个方法
|
2.AlertDialog类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
setView(
View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom)
设置提示框布局,并且能够设置布局与提示框设置边距。全部把边距设置为0,可解决2.3系统提示框显示问题
| ||||||||||
void |
setView(
View view)
设置提示框的内部布局样式
| ||||||||||
void |
dismiss()
从Dialog类继承的方法,退出当前对话框
|
五.多媒体
1. 图像
1.1 基本常识
(1)BMP图片内存大小 == 图片的总像素 x 每个像素的大小
<1>.单色:要么是黑,要么是白,所以像素大小只需要用1位即可表示,一个像素就是1/8字节
<2>.16色:一个像素最多表示16个颜色,所以只需要0-15就可以存储,也就是0000——>1111,一个像素就是1/2字节
<3>.256色:一个像素最多表示256个颜色,所以只需要0-255就可以存储,也就是0000-0000——>1111-1111,一个像素就是1个字节
<4>.24位色:一个像素表示3个字节,RGB——>并且三个颜色各占一个字节
(2)JPG压缩:类似rar压缩,把相邻相同像素颜色值压缩在一起
(3)PNG压缩:无损压缩,采用特殊算法
结论:对于压缩的图片,图片中颜色值越单一压缩效率越高,颜色值越复杂,压缩率越低微
(4)当一张图片要显示在手机上,需要的空间大小计算公式:图片总像素 x 4字节,因为Android是ARGB,用四个字节存储一个像素,所以显示图片在手机中要有一定的缩放比
1.2 BitmapFactory类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
static Bitmap |
decodeFile(
String pathName)
读取一个路径
| ||||||||||
static Bitmap |
decodeFile(
String pathName,
BitmapFactory.Options opts)
加载图片之前会先把数据加载进内存
| ||||||||||
static Bitmap |
decodeStream(
InputStream is)
读取一个输入流
|
1.3 BitmapFactory.Options静态类
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
public boolean | inJustDecodeBounds | true:获取bitmap时不会返回Bitmap对象,而是返回null,不过会把图片的信息加载到options这个对象中。false:默认 | |||||||||
public int | outHeight | 图片的高度 | |||||||||
public int | outWidth | 图片的宽度 | |||||||||
public int | inSampleSize | 采样数值,就是把你计算出来的缩放比赋值给这个成员变量,然后获取Bimap时会按照你传入的缩放比进行缩放 |
1.4 Bitmap终类
注:Android中禁止对原图进行修改,都需要把原图拷贝一个副本进行修改
重点:欺骗一下系统图库应用,发送一条SD卡被挂载的广播,让图库应用重新加载一遍SD卡,可显示保存的图片
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
static Bitmap |
createBitmap(int width, int height,
Bitmap.Config config)
创建一个空的Bitmap,获取一个图片副本时时使用,相当于创建了一张白纸
| ||||||||||
final int |
getHeight()
获取一个Bitmap图片的高度
| ||||||||||
final int |
getWidth()
获取一个Bitmap图片的宽度
| ||||||||||
final Bitmap.Config |
getConfig()
获取一个Bitmap图片的配置信息
| ||||||||||
void |
setPixel(int x, int y, int color)
设置图片中一点的颜色是指定颜色 | ||||||||||
boolean |
compress(
Bitmap.CompressFormat format, int quality,
OutputStream stream)
保存图片到本地,format:图片格式,此对象有三个静态成员jpg,png,gif;quality:0—100;stream:输出流。
|
1.5 Canvas类
注:画布类
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Canvas(
Bitmap bitmap)
把一张Bitmap画纸铺到画布上
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
drawCircle(float cx, float cy, float radius,
Paint paint)
画圆
| ||||||||||
void |
drawLine(float startX, float startY, float stopX, float stopY,
Paint paint)
画线
| ||||||||||
void |
drawBitmap(
Bitmap bitmap,
Matrix matrix,
Paint paint)
画一张图片,参照这个bitmap参数去画,matris:矩阵,paint:画笔
| ||||||||||
void |
drawBitmap(
Bitmap bitmap, float left, float top,
Paint paint)
画一张图片,参数1:画的图片;参数2:图片与画板的左边距;参数3:图片与画板的上边距;参数4:画笔,出入null表示默认的画笔
|
1.6 Matrix类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
setRotate(float degrees)
旋转多少度,以自己为基准的(0,0)为旋转点
| ||||||||||
void |
setRotate(float degrees, float px, float py)
旋转多少度,并且自定义旋转点,x与y值是具体的长度值,不是百分比
| ||||||||||
void |
setTranslate(float dx, float dy)
平移,以(0,0)为基准点
| ||||||||||
void |
setScale(float sx, float sy)
缩放,X轴与Y轴的缩放比。x值为负数时就是镜面效果,y值为负数时就是倒影效果
| ||||||||||
boolean |
postTranslate(float dx, float dy)
位移,镜面效果需要缩放与位移连用,想让位移方法立即生效,必须使用这个方法
| ||||||||||
boolean |
postRotate(float degrees, float px, float py)
旋转,立即生效
| ||||||||||
boolean |
postScale(float sx, float sy)
缩放,立即生效
|
2.音频/视频
2.1 MediaPlayer类
功能:播放视频和音频流,视频只支持MP3和3GP格式
注意:播放音乐最好放在服务中播放,因为Activity结束后成为空进程容易被杀死,服务进程保证歌曲长期在后台运行
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
MediaPlayer()
初始化这个播放器,空参数的构造函数
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
setAudioStreamType(int streamtype)
设置音频流类型
| ||||||||||
void |
setDataSource(
String path)
设置数据源,path就是资源路径
| ||||||||||
void |
prepare()
准备播放,准备的逻辑执行在主线程,可能会因为请求网络资源阻塞主线程
| ||||||||||
void |
prepareAsync()
异步的准备,准备的逻辑执行在子线程,推荐使用这个准备方法
| ||||||||||
void |
setOnPreparedListener(
MediaPlayer.OnPreparedListener listener)
注册一个准备播放的监听,加不加都可以,不过最好加上。监听准备好后再播放
| ||||||||||
void |
start()
第一次就是开始播放,以后调用此方法就是继续播放的功能,一般在监听中运行此方法
| ||||||||||
void |
pause()
暂停播放
| ||||||||||
int |
getDuration()
获取歌曲或视频文件的总时长
| ||||||||||
int |
getCurrentPosition()
获取到歌曲当前的播放位置,以总长度为基准
| ||||||||||
void |
seekTo(int msec)
跳到指定位置
| ||||||||||
void |
release()
释放资源
| ||||||||||
void |
reset()
重启播放器到未初始化的时候,就是设置资源路径之前
| ||||||||||
void |
setDisplay(
SurfaceHolder sh)
设置视频显示,该参数值通过SurfaceView对象获取
| ||||||||||
boolean |
isPlaying()
是否正在播放
| ||||||||||
void |
setLooping(boolean looping)
设置循环的次数
| ||||||||||
void |
setVolume(float leftVolume, float rightVolume)
设置音量大小,值为1是最大值,参数1:左声道;参数2:右声道
| ||||||||||
static MediaPlayer |
create(
Context context, int resid)
实例化MediaPlayer播放器对象,此方法会自动调用prepare()方法。参数2:资源的引用id。
音乐资源要放在【res/raw】目录下
|
2.2 AudioManager类
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | STREAM_ALARM | 闹铃音频流 | |||||||||
int | STREAM_RING | 音乐音频流 | |||||||||
int | STREAM_MUSIC | 响铃音频流 |
2.3 SurfaceView类
注解:显示视频的控件,并且这是一个重量级控件
解释:轻量级控件——显示的内容是通过onDraw()方法画出来的
重量级控件——不是画出来的,必须等待它加载完才能加载资源
特:a.这个类底层维护了两个线程,A线程——显示界面,B线程——后台加载数据
b.可以在子线程更新UI
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
SurfaceHolder |
getHolder()
获取运行Holder,来给MediaPlaryer用
|
2.3 SurfaceHolder接口
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
abstract void |
addCallback(
SurfaceHolder.Callback callback)
解决视频无法播放的问题。添加三个回调方法,分别是:SurfaceView销毁、创建、放生改变,想要播放视频,需要在创建的回调方法中开启MediaPlayer。
|
2.4 VideoView类
注解:播放视频的控件,继承了SufaceView,对MediaPlayer进行了封装
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
setVideoPath(
String path)
设置视频的路径 | ||||||||||
void |
start()
开始播放 |
2.4 vitamio框架
官网:www.vitamio.org
注明:ffmpeg解码技术,支持大多数视频格式
使用:
(1)引入vitamio的lib
(2)在布局中添加如下
<io.vov.vitamio.widget.VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
(3)逻辑处理代码如下:if (!LibsChecker.checkVitamioLibs(this)) {
return;
}
final VideoView vv = (VideoView) findViewById(R.id.vv);
vv.setVideoPath("http://192.168.1.2:8080/haha.avi");
vv.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
vv.start();
}
});
//设置video的控制器
vv.setMediaController(new MediaController(this));
(4)一定要在清单文件中初始化InitActivity,这个Activity时vitamio中的一个类
3.调用系统的摄像头
解释:没有直接封装摄像头的api,因为Android的手机型号太多了
方式:隐式意图开始照相或者录像,具体方法去查看文档【Media and Camera】==>【Camera】,想用模拟器调用计算机摄像头需要Webcam0模式
3.1 照相
//创建意图对象
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath(),"paizhao.png"))); // set the image file name
//开启意图 获取结果
startActivityForResult(intent, 0);
3.2 录像
//创建意图对象
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath(),"luxiang.3gp"))); // set the image file name
//开启意图 获取结果
startActivityForResult(intent, 0);
六.布局相关
1. selector选择器
(1)这是一个普通的选择器,能够作为任意控件的背景
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/function_greenbutton_pressed" /><!-- 按下时的显示的图片 -->
<item android:state_focused="true" android:drawable="@drawable/function_greenbutton_pressed" /><!-- 获取焦点时显示的图片 -->
<item android:drawable="@drawable/function_greenbutton_normal"/><!-- 默认什么都不做时显示的图片 -->
</selector>
2.shape形状
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">---------restangle:矩形;oval:圆;line:线;ring:圆环
<!-- 矩形的圆角弧度 -->
<corners android:radius="10dp"/>----------半径值就是圆角半径值。其他参数设置的是单一圆角半径值
<!-- 纯色 -->
<solid android:color="@color/gray"/>
<!-- 渐变 -->
<gradient
android:startColor="#F00"---------开始色
android:centerColor="#66CCFF"----------中间色
android:endColor="#000"---------结束色,还有angle这种属性调节渐变的角度
/>
<!-- 线条 -->
<stroke
android:width="1dp"----------线条宽度
android:color="#000"-----------线条颜色
android:dashWidth="3dp"-----------虚线每一个小线段的长度
android:dashGap="2dp"-----------虚线中分割段的长度
/>
</shape>
Shape形状的其他用法
ProgressBar通过【android:indeterminateDrawable="@drawable/..."】设置自定义的背景样式
<rotate xmlns:android="http://schemas.android.com/apk/res/android"-----------设置的圆环旋转动画
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="2.5"------------内半径比,就是圆环里圆的半径比,半径比值越大,圆越小;反之值越大
android:shape="ring"------------圆环
android:thicknessRatio="15"------------厚度比,圆环外环厚度比,厚度比值越大,圆越小;反之,值越大
android:useLevel="false"------------让外边的旋转动画和shape互不影响的属性 >
<gradient
android:centerColor="#FF6666"
android:endColor="#FF0000"
android:startColor="#FFF"
android:type="sweep" />
</shape>
</rotate>
3.插补器
使用:一般与动画连用,能够修改x变化的值为指定方程式的值,x类似于时间值,所得出的y值方程式值就是移动的距离,这样就能够实现各种加速,周期,弹簧等移动效果
//自定义插补器
Animation animation = new Animation(){};
animation.setInterpolator(new android.view.animation.Interpolator() {
@Override
public float getInterpolation(float x) {
return x;//这里输入值变化的方程式,来改变移动值得特殊变化,这样写就是指匀速移动y=x,这种形式
}
});
循环插补器的Xml文件定义
<cycleInterpolator android:cycles="7" />------------循环插补器,循环次数是7次
4.图层
注:自定义进度条要要需要一个图层,并且ProgressBar添加此图层通过progressDrawable属性
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!--进度条背景-->
<item
android:id="@android:id/background"
android:drawable="@drawable/security_progress_bg"/>
<!--预加载进度图片-->
<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/security_progress">
</item>
<!--进度加载图片-->
<item
android:id="@android:id/progress"
android:drawable="@drawable/security_progress">
</item>
</layer-list>
5. 9patch图( *.9.png)
(1)制作工具:【sdk/tools/draw9patch.bat】
a.把目标图片拖曳到图形编辑器中,会看到一个图片的编辑图和三个图片的拉伸效果图
b.编辑图片,上边线中的黑色点或者线表示水品拉伸的区域(当整体颜色基本相同,拉伸区域设置为点即可。如果颜色有差异,根据需求设置拉伸区域为线)
d.右边线和下边线表示的是文本输入的内容区域,并且这个区域会随着上边或左边的拉伸而拉伸