您的位置:首页 > 移动开发 > Android开发

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

2016-10-29 21:48 423 查看

1      基本UI(二)

1.1    进度条

1.1.1   



常用属性:

style  进度条样式

android:max 进度最大值

android:progress 进度值

setMax(intmax)  设置进度最大值

常用方法:

setMax(intmax)  设置进度最大值

getMax() 获取进度最大值

setProgress(intprogrss)  设置进度值

getProgress()  获取进度值

 

==练习

<ProgressBar

       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

<?xml version="1.0"encoding="utf-8"?>

<resources>

   <!-- 字符串数组 -->

   <string-array name="nameaa">

       <item>小明</item>

       <item>小亮</item>

    </string-array>

   

   <!-- 整型数组资源 -->

   <integer-array name="interarray">

       <item>1</item>

       <item>2</item>

    </integer-array>

</resources>

//字符串数组

                   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.文件名称)

<?xml version="1.0"encoding="UTF-8"?>

<books>

         <bookid="1">

                   <name>哈利波特</name>

                   <price>99.9</price>

         </book>

         <bookid="2">

             <name>Thinking In Java</name>

                   <price>120</price>

         </book>

         <bookid="3">

             <name>小李飞刀</name>

                   <price>50</price>

         </book>

</books>

//原始xml资源

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

                   //解析省略  

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

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



 

1.3.4  图像资源

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

1、普通图像资源

2、  图像状态(selector)资源

slt_play.xml

<?xml version="1.0"encoding="utf-8"?>

<selectorxmlns:android="http://schemas.android.com/apk/res/android" >   

   <item android:state_pressed="true"android:drawable="@drawable/play_pressed"></item>

         <itemandroid:state_pressed="false"android:drawable="@drawable/play"></item>

</selector>

引用:

android:background="@drawable/slt_play"

3、  外形(shape)资源

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

 

   <?xml version="1.0" encoding="utf-8"?>

   <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属性,那么渐变色就会失效-->

       <solid

           android:color="color" />

<!-- 边框 -->

       <stroke

           android:width="integer"

            android:color="color"

           android:dashWidth="integer"

           android:dashGap="integer" />

</shape>

 

引用:

android:background="@drawable/shape_demo"

 

 

<?xml version="1.0"
encoding="utf-8"?>

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

    <item android:drawable="@drawable/shape_cenert_item_press"android:state_focused="true"/>

    <item android:drawable="@drawable/shape_cenert_item_press"android:state_focused="false"
android:state_pressed="true"/>

    <item android:drawable="@drawable/shape_center_item_mornal"android:state_focused="false"/>

</selector>
 



 

1.3.5  样式和主题



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

样式和主题的区别

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

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

Values\ styles.xml

 

   <!-- 自定义控件样式 -->

   <style name="text_style">

       <item name="android:textColor">#F00</item>

       

   </style>

   

    <stylename="text_style2" parent="text_style">

        <itemname="android:textStyle">italic</item>      

</style>

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

引用:

 style="@style/text_style2"

 

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

            <style name="red_XYSTheme">

       <item name="android:background">#D2E6D7</item>

   </style>

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

       <item name="android:background">#32FE32</item>

       <!-- 设置标题栏的高度 -->

       <item name="android:windowTitleSize">40dip</item>

   </style>

    <style name="girl_XYSTheme">

        <!-- 用图片作为主题背景-->

        <item name="android:windowBackground">@drawable/abc</item>

        <!-- 无标题栏 -->

        <item name="android:windowNoTitle">true</item>

        <!-- 全屏 -->

        <item name="android:windowFullscreen">true</item>

</style>

在清单文件中引用:

<activity

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

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

       <activityandroid:name="com.example.day05theme.Activity3"

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

 



 

1.4    其他资源文件

Values下的

color:颜色资源

                   位置:res/values/colors.xml

dimen:尺寸资源

                   位置:res/values/dimens.xml

id:id资源

常见使用形式:values

<?xml version="1.0"encoding="utf-8"?>

<resources>

    <!--id资源 -->

    <item type="id"name="tv1"/>

</resources>

引用:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: