Android之进度条控件和常用资源分类总结

1      基本UI(二)

1.1    进度条

1.1.1

常用属性:

style进度条样式

Android:max进度最大值

android:progress进度值

setMax(intmax)设置进度最大值

常用方法:

setMax(intmax)设置进度最大值

getMax()获取进度最大值

setProgress(intprogrss)设置进度值

getProgress()获取进度值

==练习

android:id="@+id/pdar1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

style="?android:attr/progressBarStyleHorizontal"

android:max="100"

android:progress="30"/>

@Override

publicvoid onClick(View v) {

//TODO Auto-generated method stub

switch(v.getId()) {

caseR.id.btn_add:

pdar1.setProgress(pdar1.getProgress()+ 10);

break;

caseR.id.btn_minus:

pdar1.setProgress(pdar1.getProgress()- 10);

break;

default:

break;

}

tv_progress.setText(pdar1.getProgress()+"%");

}

}

//如果需要执行耗时操作,那么耗时操作就应该放在子线程中执行

newThread(){

booleanisRight = true;  //记录滚动条的滚动方向

publicvoid run() {

//自动来回滚动

while(true){

try{

Thread.sleep(50);

//获取当前进度

int progress = pbar.getProgress();

//判断当前的进度的位置,如果是0或最大值,就需要改变方向

if(progress<=0){

isRight= true;  //代表方向往右

}elseif(progress >= pbar.getMax()){

isRight = false;  //代表方向往左

}

//根据滚动的方向修改滚动条的值

if(isRight){

pbar.setProgress(pbar.getProgress()+1);

}else{

pbar.setProgress(pbar.getProgress()-1);

}

}catch (InterruptedException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}.start();

1.1.2  练习触摸事件实现快进效果

publicclass MainActivity extends Activity {

privateButton button1;

privateSeekBar seekBar1;

privateSeekBarAutoRun seekBarAutoRun;

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

bindListener();

}

privatevoid bindListener() {

//设置View的触摸事件

button1.setOnTouchListener(newOnTouchListener() {

@Override

publicboolean onTouch(View v, MotionEvent event) {

//TODO Auto-generated method stub

switch(event.getAction()) {

caseMotionEvent.ACTION_DOWN://手指按下

Log.i("msg","手指按下");

//进度条自动开始滚动

if(seekBarAutoRun==null){

seekBarAutoRun= new SeekBarAutoRun();

seekBarAutoRun.start();

}

break;

caseMotionEvent.ACTION_MOVE://手指移动

Log.i("msg","手指移动");

break;

caseMotionEvent.ACTION_UP://手指离开

Log.i("msg","手指离开");

//进度条自动停止滚动

if(seekBarAutoRun!= null){

seekBarAutoRun.autoStopRunTask();

seekBarAutoRun= null;

}

break;

default:

break;

}

returntrue;      //事件消费的问题

}

});

}

privatevoid findViews() {

button1= (Button) this.findViewById(R.id.button1);

seekBar1= (SeekBar) this.findViewById(R.id.seekBar1);

}

classSeekBarAutoRun extends Thread{

@Override

publicvoid run() {

while(!isInterrupted()){

try{

Thread.sleep(50);

seekBar1.setProgress(seekBar1.getProgress()+ 1);

}catch (InterruptedException e) {

e.printStackTrace();

break;

}

}

}

/**

* 停止自动滚动

*/

publicvoid autoStopRunTask(){

interrupt();

}

}

}

1.1.3  SeekBar

SeekBar是ProgressBar的子类,功能很相似

SeekBar可以与用户进行交互,在展示进度的同时允许用户手动改变进度

特有属性和方法:

android:thumb设置滑块所使用的图片

setOnSeekBarChangeListener(listener)  设置滑动监听器

1.1.4  RatingBar

【特有属性和方法

android:numberStars设置星星的数量(默认5颗星)

android:rating设置被点亮的星星的个数

android:stepSize设置最小评分的颗粒度

setOnRatingBarChangeListener(listener)设置监听器

1.1.5  SeekBar练习

private void bindListener() {

seekbar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {

@Override

public voidonStopTrackingTouch(SeekBar seekBar) {

// TODOAuto-generated method stub

}

@Override

public voidonStartTrackingTouch(SeekBar seekBar) {

// TODOAuto-generated method stub

}

@Override

public voidonProgressChanged(SeekBar seekBar, int progress,

booleanfromUser) {

if(progress<=30){

//imageview.setImageResource(R.drawable.img1);

imageview.setImageResource(imges[0]);

}elseif(progress<=60){

//imageview.setImageResource(R.drawable.img2);

imageview.setImageResource(imges[1]);

}else if(progress<=90){

//imageview.setImageResource(R.drawable.img3);

imageview.setImageResource(imges[2]);

}

}

});

}

1.2    资源文件

1、id

2、布局

3、字符串

4、数组

5、样式和主题

6、菜单

7、已编译的任意XML资源文件:res/xml

8、未编译的原始资源文件:res/raw

9、图像

普通图像资源:drawable

xml图像资源:bitmap

图层(Layer)资源:layer-list

图像状态(State)资源:selector

图像级别(Level)资源:level-list

淡入淡出(CrossFade)资源:transition

外形(Shape)资源:shape(shape、gradient、padding、corners、stroke)

10、动画资源

逐帧动画:res/drawable

补间动画:res/anim

透明度补间动画 alpha

缩放补间动画 scale

旋转动画 rotate

移动补间动画translate

属性动画:res/animator(api11出现)

逐帧动画:res/drawable

属性动画:res/animator(api11出现)

1.3    各种资源文件的xml格式

1.3.1  字符串资源

Android的国际化和本地化

internationalization(国际化)简称 i18n,因为在i和n之间还有18个字符

localization(本地化),简称L10n

一般说明一个地区的语言时,用语言-地区的形式,如  zh-CN, zh-TW

//获取字符串资源

StringssString = getResources().getString(R.string.app_name);

getString(R.string.app_name);      //等价

1.3.2  数组资源

在Android中,推荐使用数组资源文件来定义数组

位置:res/values/arrays.xml



小明

小亮


1

2

//字符串数组

String[]names=getResources().getStringArray(R.array.nameaa);

Log.i("MainActivity",names.toString());

//获取整型数组资源

int[] intArray=getResources().getIntArray(R.array.interarray);

Log.i("MainActivity",intArray.toString());

1.3.3  原始xml资源

位置:res/xml目录下

Java代码中的获取方式:getResources().getXml(R.xml.文件名称)


哈利波特

99.9

Thinking In Java

120

小李飞刀

50

//原始xml资源

XmlResourceParserparser =getResources().getXml(R.xml.books);

//解析省略

//这里注意的是,XmlResourceParser是一个pull解析器,不过多了一个方法,就是close方法

//在解析完xml文件后,记得一定要调用close()方法释放资源

1.3.4  图像资源

【可以新建一个与分辨率无关适配的图形资源文件夹:drawble

1、普通图像资源

2、  图像状态(selector)资源

slt_play.xml


引用:

android:background="@drawable/slt_play"

3、  外形(shape)资源

渐变色、倒圆角、尺寸、内边距


<shape

xmlns:android="http://schemas.android.com/apk/res/android"

android:shape=["rectangle" | "oval" |"line" | "ring"] >


<corners

android:radius="integer"

android:topLeftRadius="integer"

android:topRightRadius="integer"

android:bottomLeftRadius="integer"

android:bottomRightRadius="integer" />


<gradient

android:angle="integer"

android:centerX="integer"

android:centerY="integer"

android:centerColor="integer"

android:endColor="color"

android:gradientRadius="integer"

android:startColor="color"

android:type=["linear" | "radial" |"sweep"]

android:useLevel=["true" | "false"] />

<padding

android:left="integer"

android:top="integer"

android:right="integer"

android:bottom="integer" />

<size

android:width="integer"

android:height="integer" />

<solid

android:color="color" />


<stroke

android:width="integer"

android:color="color"

android:dashWidth="integer"

android:dashGap="integer" />

引用:

android:background="@drawable/shape_demo"


1.3.5  样式和主题

在代码中可以通过style和theme来提高代码的复用性和可维护性。

样式和主题的区别

作用范围不同,样式作用于单个小控件,而主题作用于Activity或整个APP

引用位置不同,样式都是在布局文件中被引用,而主题是在清单文件中被引用

Values\ styles.xml


#F00

italic

//注意:样式可以实现继承

引用:

style="@style/text_style2"

主题:定义同样式,在Style.xml中,引用的形式不同:是在清单文件中引用。

background">#D2E6D7

parent="@android:style/Theme.DeviceDefault.Dialog.NoActionBar">

#32FE32


windowTitleSize">40dip


windowBackground">@drawable/abc


windowNoTitle">true


windowFullscreen">true

在清单文件中引用:

android:name="com.example.day05theme.Activity2"

android:theme="@style/blue_XYSTheme"/>

android:theme="@style/girl_XYSTheme"/>

1.4    其他资源文件

Values下的

color:颜色资源

位置:res/values/colors.xml

dimen:尺寸资源

位置:res/values/dimens.xml

id:id资源

常见使用形式:values

"1.0"encoding="utf-8"?>


"id"name="tv1"/>

引用:

android:id="@id/tv2"

使用的注意事项:

1)在布局中引用id资源的话,必须要保证在引用之前先创建过这个id

也可以在引用时候使用@+id,保证id肯定存在,

PS:@+id的意思就是在使用这个id之前先会判断id是否存在,如果不存在就创建,如果存在就直接引用

2)在同一个布局文件中不能出现同名的id,但是在不同的布局文件中可以出现相同的id

3)我们可以预先将需要使用的id全部抽取出来作为资源定义在资源文件中

提示:在Android支持资源类型有很多,如果要学习其他资源的使用,那么建议查看官方文档进行学习,如果要看资源使用的格式,可以查看SDK自带的资源文件,SDK自带的资源文件位置:SDK根目录\platforms\android-XX\data\res

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,793评论 25 707
  • 本人初学Android,最近做了一个实现安卓简单音乐播放功能的播放器,收获不少,于是便记录下来自己的思路与知识总结...
    落日柳风阅读 19,097评论 2 41
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,367评论 0 17
  • 项目有做完的一天,但是开创一份事业之后往往是没有回头路的。 如果真的决定从零开始创业,那么即将面临的是锁定奉献人生...
    Tina_mama阅读 219评论 0 2
  • 实例方法 实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供访问和修改实例属性的方法或提供与实例...
    蛊毒_阅读 308评论 0 1