• Android View 之进度条+拖动条+星级评论条....


    PS:将来的你会感谢现在奋斗的自己....

    学习内容:

    1.进度条

    2.拖动条

    3.星级评论条

    1.进度条...    

      进图条这东西想必大家是很熟悉的...为了使用户不会觉得应用程序死掉了,因此为之设置一个进度条使应用程序的运行状态更好的反馈给客户...这也就是进度条的作用...因此一般的应用程序都会加入进度条...进度条分为圆形进度条和线性的进度条...目的都是一样的,只是展示的效果是不同的...用代码讲解一下...

     <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
            <TextView 
                android:id="@+id/TextView_1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="圆形进度条..."
                android:textSize="18sp"/>
            <ProgressBar 
                android:id="@+id/progress_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?android:attr/progressBarStyleLarge"/>
            <TextView 
                android:id="@+id/TextView_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="圆形小进度条..."
                android:textSize="18sp"/>
            <ProgressBar 
                android:id="@+id/progress_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?android:attr/progressBarStyleSmall"/>
            <TextView 
                android:id="@+id/TextView_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="水平進度條"
                android:textSize="18sp"/>
            <ProgressBar 
                android:id="@+id/progressbar_3"
                android:layout_width="300dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:max="200"
                android:progress="50"
                android:secondaryProgress="75"
                style="?android:attr/progressBarStyleHorizontal"/>
            <LinearLayout 
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <Button 
                    android:id="@+id/Button_1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="增加..."/>
                <Button 
                    android:id="@+id/Button_2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="減少..."/>
            </LinearLayout>
    </LinearLayout>

      说一下细节的东西...这里style属性表示的是进度条是什么类型的...max表示进度条的最大值...progress表示第一级进度条的初始值...secondaryprogress表示第二级进度条的初始值...大家运行一下就能看得出来哪个是第一级哪个是第二级...然后定义了一个水平进度条,使用两个按钮来控制进度条的增加和减少...

    package com.example.android_view;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.Window;
    import android.widget.ProgressBar;
    import android.widget.Button;
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          
            requestWindowFeature(Window.FEATURE_PROGRESS);//设置标题栏的进度条...
            setContentView(R.layout.activity_main);
            setProgressBarVisibility(true);//设置进度条的可见性,true可见 ,false不可见..
           
            final ProgressBar progressbar_h=(ProgressBar)findViewById(R.id.progressbar_3);//获取水平进度条的id值..
           
            setProgress(progressbar_h.getProgress()*100);//因为标题栏的进度条也是水平进度条,因此可以这样进行赋值....
            setSecondaryProgress(progressbar_h.getProgress()*100);//设置标题栏的二级进度值..
            Button but=(Button)findViewById(R.id.Button_1);
            but.setOnClickListener(new Button.OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    progressbar_h.incrementProgressBy(5);//当点击按钮时每次进度条的值都会增加5...但是要*100...
                    setProgress(progressbar_h.getProgress()*100);
                }
                
            });
            Button but_1=(Button)findViewById(R.id.Button_2);
            but_1.setOnClickListener(new Button.OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    progressbar_h.incrementProgressBy(-5);//这个就是-5了...同时也要*100...
                    setProgress(progressbar_h.getProgress()*100);
                }    
            });        
        }   
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }  
    }

    2.拖动条...

     <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
           <TextView 
               android:id="@+id/myTextView"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:textSize="16sp"/>
           <SeekBar 
               android:id="@+id/seekbar_1"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"/>
    </LinearLayout>

    java文件...

    package com.example.android_view;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.TextView;
    import android.widget.SeekBar;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    public class MainActivity extends Activity {
        private TextView tv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv=(TextView)findViewById(R.id.myTextView);
            SeekBar ser=(SeekBar)findViewById(R.id.seekbar_1);
            ser.setProgress(60);
            tv.setText("初始值为:"+60);
            /*发现了个好玩的事情,就是注册监听有很多种写法...
             * OnSeekBarChangeListener osbcl=new OnSeekBarChangeListener(){
             *     内部方法...
             * }
             * OnSeekBarChangeListener osbcl=new SeekBar.OnSeekBarChangeListener(){
             *     内部方法...
             * }
             * OnSeekBarChangeListener osbcl=(new SeekBar.OnSeekBarChangeListener(){
             *     内部方法...
             * });
             * 上面这三种需要注册...ser.setOnSeekBarChangeListener(osbcl); 就可以使用了...
             * ser.OnSeekBarChangeListener =(new SeekBar.OnSeekBarChangeListener(){
             *     内部方法...
             * });
             * */
            //这个监听内部有三种方法...都要进行重写...
            OnSeekBarChangeListener osbcl=new OnSeekBarChangeListener() {
                //停止拖动时的方法...
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
                    MainActivity.this.tv.append("停止值为:"+seekBar.getProgress()+"
    ");//字符串追加函数...将这些字符串追加到tv中...
                }
                //开始拖动时的方法...
                @Override  
                public void onStartTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
                    MainActivity.this.tv.append("开始值为"+seekBar.getProgress()+"
    ");
                }
                //改变后的方法...
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromUser) {
                    // TODO Auto-generated method stub
                    MainActivity.this.tv.append("正在拖动,当前值为:"+seekBar.getProgress()+"
    ");
                }
            };
            ser.setOnSeekBarChangeListener(osbcl);
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    }

    3.星级评分条...

      评论条这东西,只要是和客户利益挂钩的就一定会有..评论这个东西...星级评论条是非常常见的..比如说我们在淘宝买的东西到了以后就会给卖家一个评价,这个评价是星级+文字进行评价...使更多的消费者去了解卖家的状况...从而形成信息交互...

     <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <!--rating="3"表示初始值設置為3..-->
           <RatingBar 
               android:id="@+id/rat_1"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:rating="3"/>   
           <RatingBar 
               android:id="@+id/rat_2"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:rating="3"/>
           <RatingBar 
               android:id="@+id/rat_3"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:rating="3"/>   
    </LinearLayout>

    java文件...

    package android.basic.lesson11;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.RatingBar;
    import android.widget.RatingBar.OnRatingBarChangeListener;
    
    public class MainHelloRatingBar extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            //定义组件对象
            final RatingBar rb1 = (RatingBar)findViewById(R.id.rat_1);
            final RatingBar rb2 = (RatingBar)findViewById(R.id.rat_2;
            final RatingBar rb3 = (RatingBar)findViewById(R.id.rat_3);
    
            //定义评分监听器
            OnRatingBarChangeListener orbcl= new OnRatingBarChangeListener(){
    
                 @Override
                 public void onRatingChanged(RatingBar ratingBar, float rating,
                                 boolean fromUser) {
                                         switch(ratingBar.getId()){
                                         case R.id.RatingBar01:
                                                 //把第一个评分条的值取出来设置给其他评分条
                                                 rb2.setRating(rb1.getRating());
                                                 rb3.setRating(rb1.getRating()*2);//十颗星所以乘以2
                                                       break;
                                         case R.id.RatingBar02:
                                                 rb1.setRating(rb2.getRating());
                                                 rb3.setRating(rb2.getRating()*2);
                                                       break;
                                         case R.id.RatingBar03:
                                                 rb1.setRating(rb3.getRating()/2);
                                                 rb2.setRating(rb3.getRating()/2);
                                                       break;
                            }
                      }
                } ;
                //绑定监听器
                rb1.setOnRatingBarChangeListener(orbcl);
                rb2.setOnRatingBarChangeListener(orbcl);
                rb3.setOnRatingBarChangeListener(orbcl);
            }
        }

    总而言之,无论是进度条,拖动条,还是评分条...在应用程序中被广泛的应用...因此需要熟练掌握...

    PS:最近打算做个闹钟app...祝自己成功....

                                                                                                 

  • 相关阅读:
    左右对齐Justify遇到的坑
    JS中的相等性判断===, ==, Object.is()
    JS调用栈的一些总结
    VueI18n
    【转】Webpack 快速上手(下)
    【转】Webpack 快速上手(中)
    【转】Webpack 快速上手(上)
    springboot打包排除指定jar包依赖
    prometheus+grafana搭建
    fbctf 安装部署出现的问题
  • 原文地址:https://www.cnblogs.com/RGogoing/p/4542019.html
Copyright © 2020-2023  润新知