样式、国际化、动画、提示框、多媒体"/>
Android开发——Android特殊,样式、国际化、动画、提示框、多媒体
一.样式和主题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=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><TextViewstyle="@style/myStyle"/><TextViewstyle="@style/myStyle"/><TextViewstyle="@style/myStyle"/><TextViewstyle="@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=""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=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><ImageViewandroid: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=""android:duration="2000"android:fromAlpha="1.0"android:repeatCount="2"android:repeatMode="reverse"android:toAlpha="0" ><!-- 调用这个动画通过AnimationUtils.loadAnimation(context,id)来获取该动画的对象 --></alpha><!-- 旋转动画 -->
<rotate xmlns: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=""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=""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><objectAnimatorandroid: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静态类
注意:通过addView()添加一个子布局的话最好设置布局父类背景颜色是白色,不这样2.3显示可能有问题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
注明: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() {@Overridepublic 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选择器
小知识:当你想设置不点击时和原图没有任何区别时,可设置选择器中的drawable值或者color值为“@android:color/transparent”(1)这是一个普通的选择器,能够作为任意控件的背景
<selector xmlns: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="" 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=""-----------设置的圆环旋转动画android:fromDegrees="0"android:pivotX="50%"android:pivotY="50%"android:toDegrees="360" ><shapexmlns:android=""android:innerRadiusRatio="2.5"------------内半径比,就是圆环里圆的半径比,半径比值越大,圆越小;反之值越大android:shape="ring"------------圆环android:thicknessRatio="15"------------厚度比,圆环外环厚度比,厚度比值越大,圆越小;反之,值越大android:useLevel="false"------------让外边的旋转动画和shape互不影响的属性 ><gradientandroid: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() {@Overridepublic float getInterpolation(float x) {return x;//这里输入值变化的方程式,来改变移动值得特殊变化,这样写就是指匀速移动y=x,这种形式}
});
循环插补器的Xml文件定义
<cycleInterpolator android:cycles="7" />------------循环插补器,循环次数是7次
4.图层
注:自定义进度条要要需要一个图层,并且ProgressBar添加此图层通过progressDrawable属性
<layer-list xmlns:android="" ><!--进度条背景--><itemandroid:id="@android:id/background"android:drawable="@drawable/security_progress_bg"/><!--预加载进度图片--><itemandroid:id="@android:id/secondaryProgress"android:drawable="@drawable/security_progress"></item><!--进度加载图片--><itemandroid:id="@android:id/progress"android:drawable="@drawable/security_progress"></item>
</layer-list>
5. 9patch图( *.9.png)
效果:Android手机上,可以按照需求自动拉伸的图片(1)制作工具:【sdk/tools/draw9patch.bat】
(2)使用方法:a.把目标图片拖曳到图形编辑器中,会看到一个图片的编辑图和三个图片的拉伸效果图
b.编辑图片,上边线中的黑色点或者线表示水品拉伸的区域(当整体颜色基本相同,拉伸区域设置为点即可。如果颜色有差异,根据需求设置拉伸区域为线)
c.左边线表示的是图片的垂直拉伸区域d.右边线和下边线表示的是文本输入的内容区域,并且这个区域会随着上边或左边的拉伸而拉伸
更多推荐
Android开发——Android特殊,样式、国际化、动画、提示框、多媒体
发布评论