精华内容
下载资源
问答
  • 可用作负载指示器并以循环方式显示进度或值。 在搜寻模式下,它也可以用来设置一个值。 尝试。 全动画动画设定值。 旋转模式。 从旋转模式转换为值模式。 完全可定制的: 所有零件都具有可自定义的颜色和...
  • java.lang.Object↳android.view.View↳android.widget.ProgressBar直接子类AbsSeekBar间接子类RatingBar, SeekBar在某些操作的进度中的可视指示器,为用户...在不确定模式下,进度条显示循环动画。这种模式常用于应...

    java.lang.Object

    ↳android.view.View

    ↳android.widget.ProgressBar

    直接子类

    AbsSeekBar

    间接子类

    RatingBar, SeekBar

    在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中

    1、android.widget. ProgressBar,继承自android.view.View 。在android.widget包中。对应对话框ProgressDialog。ProgressBar有两种展示方式,表盘形式(普通、小、大)和条形填充形式。在layout定义时,需要通过设施style属性类设置展示方式。

    ProgressBar的样式有四种:

    android:progressBarStyle:默认进度条样式,不确定模式

    android:progressBarStyleHorizontal:水平进度条样式

    android:progressBarStyleLarge :大号进度条样式,也是不确定进度模式

    android:progressBarStyleSmall :小号进度条样式,也是不确定进度模式

    二、XML重要属性

    android:max--  这事进度条长度最大值

    android:progressBarStyle:默认进度条样式

    android:progressBarStyleHorizontal:水平样式

    style="?android:attr/progressBarStyleLarge" --- 属性风格类型--大圆圈,如下图

    style=”?android:attr/progressBarStyleSmall”--- 属性风格类型--小圆圈,如下图:

    f1e03bf7935f225593e6307397ce8bd3.png

    style="?android:attr/progressBarStyleHorizontal"  --水平进度条 --如下图:

    96f9bd9369be4433292ab3c421067c95.png

    几秒钟之后自动滚到到如下:

    99d9ab1887175b629cbfe891fdd19d99.png

    也可以用下面的形式代替上面的形式的:

    //中

    //大圆

    //小圆

    三、重要方法

    getMax():返回这个进度条的范围的上限

    getProgress():返回当前进度值

    getSecondaryProgress():返回次要当前进度值

    incrementProgressBy(int diff):指定增加的进度--即步长

    isIndeterminate():指示进度条是否在不确定模式下

    setIndeterminate(boolean indeterminate):设置不确定模式下

    setVisibility(int v):设置该进度条是否可视

    四、重要事件

    onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

    接下来看案例:

    1.定义一个布局文件progressbar.xml

    android:layout_width="fill_parent"

    android:layout_height="match_parent"

    >

    android:layout_width="fill_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

    android:id="@+id/startText"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="垂直的----标题上面也有一个进度条哦"

    android:textColor="#CD0000"

    android:background="#BC8F8F"

    />

    android:id="@+id/progtessBer_btn_id1"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    style="?android:attr/progressBarStyleLarge"

    />

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    style="?android:attr/progressBarStyleSmall"

    android:layout_gravity="center_horizontal"

    />

    android:id="@+id/startText1"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="水平的"

    android:textColor="#aaaaaa"

    />

    android:id="@+id/progtessBer_btn_id2"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    style="?android:attr/progressBarStyleHorizontal"

    />

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/progress_text"

    />

    2.之后定义java文件:ProgressBarDemo.java

    package com.dream.app.start.first.prograssbar;

    import com.dream.app.start.MenuDemo;

    import com.dream.app.start.R;

    import com.dream.app.start.R.id;

    import com.dream.app.start.R.layout;

    import com.dream.app.start.utils.PublicClass;

    import android.app.Activity;

    import android.content.Intent;

    import android.os.Bundle;

    import android.os.Handler;

    import android.text.method.ScrollingMovementMethod;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.view.Window;

    import android.widget.AdapterView;

    import android.widget.AdapterView.OnItemClickListener;

    import android.widget.ArrayAdapter;

    import android.widget.Button;

    import android.widget.ListView;

    import android.widget.ProgressBar;

    import android.widget.TextView;

    import android.widget.Toast;

    public class ProgressBarDemo extends PublicClass {

    private ProgressBar progressbar,progressbar_1;

    Button btn1,btn2;

    private int prostatus=0;

    //创建一个handler对象

    private Handler handler=new Handler();

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);

    //在标题条里放置进度条。请求窗口特色风格,这里设置成不明确的进度风格

    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    //设置窗口进度条特性风格

    // requestWindowFeature(Window.FEATURE_PROGRESS);

    setContentView(R.layout.progressbar);

    //设置标题栏中的不明确的进度条是否可以显示,当你需要表示处理中的时候设置为True,处理完毕后设置为false

    setProgressBarIndeterminateVisibility(true);

    //设置进度条进度值,要乘以100的

    // setProgress(60*100);

    // setSecondaryProgress(80*100);

    btn2=(Button)findViewById(R.id.button_cancel);

    //btn2.setOnClickListener(onClick);

    progressbar=(ProgressBar)findViewById(R.id.progtessBer_btn_id2);

    progressbar_1=(ProgressBar)findViewById(R.id.progtessBer_btn_id1);

    //设置进度条的最大值

    progressbar.setMax(100000);

    progressbar_1.setMax(100000);

    //新开启一个进程

    new Thread(new Runnable() {

    @Override

    public void run() {

    // 循环1000次,不断地更新prostatus状态值

    while (prostatus++<100000) {

    //将一个Runnable对象添加到消息队列中去

    //并且当执行该对象的时候,执行run

    handler.post(new Runnable() {

    @Override

    public void run() {

    //重新设置进度条当前的值

    progressbar.setProgress(prostatus);

    progressbar_1.setProgress(prostatus);

    }

    });

    }

    }

    }).start();

    }

    //toast方法

    private void toastshow(String str) {

    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();

    }

    }

    运行效果如下:

    6c088b7b02d7894bd4372117c3117ae1.png

    ab2e4cb771350d3ab84b9a2b68e0a22c.png

    二:用图片实现滚动效果:

    1.添加图片到drawable下

    ca1bea4df6e5351e51980419d03c7aec.png

    2.自定义图片资源文件iamge_progress.xml

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

    android:drawable="@drawable/image_progress"

    android:pivotX="50%"

    android:pivotY="50%"

    />

    3.定义布局文件,progress.xml

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:gravity="center">

    android:indeterminateDrawable="@drawable/drawable_progress"

    android:layout_height="100dp"

    android:layout_width="100dp"/>

    运行效果如下:

    b8363a70f5971a1aeeaeb1d8ca4092aa.png

    4977a8bc141a33c1c6151093369dac58.png

    76b7e518d1cda4ef36af7fc492b00ca8.png

    1f2ac58f2a20de6f9e8e11958508cc2f.png

    三》自定义渐变色进度条:

    定义drawable资源文件color_progressbar.xml

    android:centerColor="#ff5a5d5a"

    android:centerY="0.75"

    android:endColor="#ff747674"

    android:angle="270"

    />

    android:centerColor="#80ffb600"

    android:centerY="0.75"

    android:endColor="#a0ffcb00"

    android:angle="270"

    />

    >

    android:endColor="#AEEEEE"

    android:angle="270" />

    2.定义对应的不布局文件:progressbar.xml在此文件中引用我们定义的drawable资源配置文件

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:gravity="center">

    android:id="@+id/color_progressBar"

    android:indeterminateDrawable="@drawable/color_progress"

    android:layout_height="wrap_content"

    android:layout_width="match_parent"/>

    或者在代码中给进度条设置自定义资源文件:

    效果如下:

    75b9e736d00e0407b58d9cd7762b0892.png

    a687c503879227a1de74cfa29faebeec.png

    四:自定义progressbar颜色:

    1.定义一个图片资源文件:

    android:fromDegrees="0"

    android:pivotX="50%"

    android:pivotY="50%"

    android:toDegrees="360" >

    android:innerRadiusRatio="3"

    android:shape="ring"

    android:thicknessRatio="8"

    android:useLevel="false" >

    android:centerColor="#FFFFFF"

    android:centerY="0.50"

    android:endColor="#FFFF00"

    android:startColor="#000000"

    android:type="sweep"

    android:useLevel="false" />

    2.定义布局文件:

    android:id="@+id/color_progressBar2"

    android:indeterminateDrawable="@drawable/color_progress2"

    android:layout_height="wrap_content"

    android:layout_width="wrap_content"/>

    3.效果:

    cc9b626181a821a8b7d25da5c1b3316e.png

    展开全文
  • 在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中 1、android.widget. ProgressBar...

    在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中

    1、android.widget. ProgressBar,继承自android.view.View 。在android.widget包中。对应对话框ProgressDialog。ProgressBar有两种展示方式,表盘形式(普通、小、大)和条形填充形式。在layout定义时,需要通过设施style属性类设置展示方式。

    ProgressBar的样式有四种:

    android:progressBarStyle:默认进度条样式,不确定模式
    android:progressBarStyleHorizontal:水平进度条样式
    android:progressBarStyleLarge :大号进度条样式,也是不确定进度模式 

    android:progressBarStyleSmall :小号进度条样式,也是不确定进度模式 


    二、XML重要属性

                 android:max--  这事进度条长度最大值

                 android:progress--设定度条当前进度值

                android:secondaryProgress--第二进度条进度值

        android:progressBarStyle:默认进度条样式

        android:progressBarStyleHorizontal:水平样式

           style="?android:attr/progressBarStyleLarge" --- 属性风格类型--大圆圈,如下图

           style=”?android:attr/progressBarStyleSmall”--- 属性风格类型--小圆圈,如下图:



           style="?android:attr/progressBarStyleHorizontal"  --水平进度条 --如下图:



           几秒钟之后自动滚到到如下:


    也可以用下面的形式代替上面的形式的:

    <ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/>//中
    <ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/> //大圆
    <ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/> //小圆


    三、重要方法

        getMax():返回这个进度条的范围的上限

        getProgress():返回当前进度值

        getSecondaryProgress():返回次要当前进度值

        incrementProgressBy(int diff):指定增加的进度--即步长

        isIndeterminate():指示进度条是否在不确定模式下

        setIndeterminate(boolean indeterminate):设置不确定模式下

        setVisibility(int v):设置该进度条是否可视

    四、重要事件

        onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

    接下来看案例:

    1.定义一个布局文件progressbar.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
         
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    <TextView
        android:id="@+id/startText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="垂直的----标题上面也有一个进度条哦"
        android:textColor="#CD0000"
        android:background="#BC8F8F"
        />
       <!-- style=”?android:attr/progressBarStyleLarge”大圆圈 -->
        <ProgressBar
          android:id="@+id/progtessBer_btn_id1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          style="?android:attr/progressBarStyleLarge"
            />
         <!-- style=”?android:attr/progressBarStyleSmall”小圆圈 -->
        <ProgressBar
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          style="?android:attr/progressBarStyleSmall"
          android:layout_gravity="center_horizontal"
            />
        <TextView
        android:id="@+id/startText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="水平的"
        android:textColor="#aaaaaa"
        />
         <!--  style="?android:attr/progressBarStyleHorizontal"  水平进度条 -->
        <ProgressBar
         android:id="@+id/progtessBer_btn_id2"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         style="?android:attr/progressBarStyleHorizontal"
         />
        <TextView
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="@string/progress_text"
         />
        </LinearLayout>
    </ScrollView>


    2.之后定义java文件:ProgressBarDemo.java

    package com.dream.app.start.first.prograssbar;
    import com.dream.app.start.MenuDemo;
    import com.dream.app.start.R;
    import com.dream.app.start.R.id;
    import com.dream.app.start.R.layout;
    import com.dream.app.start.utils.PublicClass;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.text.method.ScrollingMovementMethod;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class ProgressBarDemo extends PublicClass {
        private ProgressBar  progressbar,progressbar_1;
        Button  btn1,btn2;
        private int  prostatus=0;
        //创建一个handler对象
        private  Handler  handler=new Handler();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
             
             
              //在标题条里放置进度条。请求窗口特色风格,这里设置成不明确的进度风格
              requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
              
              //设置窗口进度条特性风格
    //         requestWindowFeature(Window.FEATURE_PROGRESS);
     
              
              setContentView(R.layout.progressbar);
              //设置标题栏中的不明确的进度条是否可以显示,当你需要表示处理中的时候设置为True,处理完毕后设置为false
     
              setProgressBarIndeterminateVisibility(true);
             
            //设置进度条进度值,要乘以100的
    //          setProgress(60*100);
    //          setSecondaryProgress(80*100);
     
            btn2=(Button)findViewById(R.id.button_cancel);
    //      btn2.setOnClickListener(onClick);
            progressbar=(ProgressBar)findViewById(R.id.progtessBer_btn_id2);
            progressbar_1=(ProgressBar)findViewById(R.id.progtessBer_btn_id1);
            //设置进度条的最大值
            progressbar.setMax(100000);
            progressbar_1.setMax(100000);
            //新开启一个进程
            new Thread(new Runnable() {
                 
                @Override
                public void run() {
                    // 循环1000次,不断地更新prostatus状态值
                    while (prostatus++<100000) {
                        //将一个Runnable对象添加到消息队列中去
                        //并且当执行该对象的时候,执行run
                        handler.post(new Runnable() {
                             
                            @Override
                            public void run() {
                                //重新设置进度条当前的值
                                progressbar.setProgress(prostatus);
                                progressbar_1.setProgress(prostatus);
                                 
                            }
                        });     
                    }
                }
            }).start();
             
        }
     
    //toast方法
        private void toastshow(String str) {
            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
     
        }
     
    }

    运行效果如下:



    二:用图片实现滚动效果:

    1.添加图片到drawable下


    2.自定义图片资源文件iamge_progress.xml

    <?xml version="1.0" encoding="utf-8"?>
    <animated-rotate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/image_progress"
        android:pivotX="50%"
        android:pivotY="50%"
        />

    3.定义布局文件,progress.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center">
    <ProgressBar
            android:indeterminateDrawable="@drawable/drawable_progress"
            android:layout_height="100dp"
            android:layout_width="100dp"/>
    </LinearLayout>

    运行效果如下:


    三》自定义渐变色进度条:

        定义drawable资源文件color_progressbar.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
       <item android:id="@android:id/background">   
        <shape>   
            <corners android:radius="5dip" />   
            <gradient android:startColor="#ff9d9e9d"  
                    android:centerColor="#ff5a5d5a"  
                    android:centerY="0.75"  
                    android:endColor="#ff747674"  
                    android:angle="270"  
            />   
        </shape>   
    </item>   
    <item android:id="@android:id/secondaryProgress">   
        <clip>   
            <shape>   
                <corners android:radius="5dip" />   
                <gradient android:startColor="#80ffd300"  
                        android:centerColor="#80ffb600"  
                        android:centerY="0.75"  
                        android:endColor="#a0ffcb00"  
                        android:angle="270"  
                />   
            </shape>   
        </clip>   
    </item>   
    <item android:id="@android:id/progress"  
    >   
        <clip>   
            <shape>   
                <corners android:radius="5dip" />   
                <gradient android:startColor="#FF3030"  
                    android:endColor="#AEEEEE"  
                    android:angle="270" />   
            </shape>   
        </clip>   
    </item> 
    </layer-list>

    2.定义对应的不布局文件:progressbar.xml在此文件中引用我们定义的drawable资源配置文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center">
    <ProgressBar
                    android:id="@+id/color_progressBar"
            android:indeterminateDrawable="@drawable/color_progress"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"/>
    </LinearLayout>

    或者在代码中给进度条设置自定义资源文件:

    效果如下:


    四:自定义progressbar颜色:

    1.定义一个图片资源文件:

    <?xml version="1.0" encoding="utf-8"?>  
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" 
        android:fromDegrees="0" 
        android:pivotX="50%" 
        android:pivotY="50%" 
        android:toDegrees="360" >  
       
        <shape 
            android:innerRadiusRatio="3" 
            android:shape="ring" 
            android:thicknessRatio="8" 
            android:useLevel="false" >  
       
            <gradient 
                android:centerColor="#FFFFFF" 
                android:centerY="0.50" 
                android:endColor="#FFFF00" 
                android:startColor="#000000" 
                android:type="sweep" 
                android:useLevel="false" />  
        </shape>  
       
    </rotate>

    2.定义布局文件:

    <ProgressBar
            android:id="@+id/color_progressBar2"
        android:indeterminateDrawable="@drawable/color_progress2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"/>

    3.效果:


    展开全文
  • 下面详细介绍ProgressBar ... 在某些操作的进度中的可视指示器,为用户...在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。 二、XML重要属性  android:progress
    下面详细介绍ProgressBar




    一、说明


      在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。


    二、XML重要属性


        android:progressBarStyle:默认进度条样式


        android:progressBarStyleHorizontal:水平样式


     


    三、重要方法


        getMax():返回这个进度条的范围的上限


        getProgress():返回进度


        getSecondaryProgress():返回次要进度


        incrementProgressBy(int diff):指定增加的进度


        isIndeterminate():指示进度条是否在不确定模式下


        setIndeterminate(boolean indeterminate):设置不确定模式下


        setVisibility(int v):设置该进度条是否可视


    四、重要事件


        onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件


    五、实例


    1.布局文件:

         

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <ProgressBar android:id="@+id/progress_horizontal"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:max="100"
            android:progress="50"
            android:secondaryProgress="75" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="默认进度条" />       
    
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <Button android:id="@+id/decrease"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="减少" />
    
            <Button android:id="@+id/increase"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="增加" />
    
        </LinearLayout>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="自定义进度条" />       
    
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <Button android:id="@+id/decrease_secondary"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第二减少" />
    
            <Button android:id="@+id/increase_secondary"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第二增加" />
    
        </LinearLayout>
    
    </LinearLayout>

    Activity中的使用:

     

    package com.example.test;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.Window;
    import android.widget.Button;
    import android.widget.ProgressBar;
    
    public class MainActivity extends Activity {
    	/* (non-Javadoc)
    	 * @see android.app.Activity#onCreate(android.os.Bundle)
    	 */
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    
    		requestWindowFeature(Window.FEATURE_PROGRESS);
    		setContentView(R.layout.activity_main);
    		setProgressBarVisibility(true);
    
    		final ProgressBar progressHorizontal = (ProgressBar) findViewById(R.id.progress_horizontal);
    		setProgress(progressHorizontal.getProgress() * 100);
    		setSecondaryProgress(progressHorizontal.getSecondaryProgress() * 100);
    
    		Button button = (Button) findViewById(R.id.increase);
    		button.setOnClickListener(new Button.OnClickListener() {
    			public void onClick(View v) {
    				progressHorizontal.incrementProgressBy(1);
    				// Title progress is in range 0..10000
    				setProgress(100 * progressHorizontal.getProgress());
    			}
    		});
    
    		button = (Button) findViewById(R.id.decrease);
    		button.setOnClickListener(new Button.OnClickListener() {
    			public void onClick(View v) {
    				progressHorizontal.incrementProgressBy(-1);
    				// Title progress is in range 0..10000
    				setProgress(100 * progressHorizontal.getProgress());
    			}
    		});
    
    		button = (Button) findViewById(R.id.increase_secondary);
    		button.setOnClickListener(new Button.OnClickListener() {
    			public void onClick(View v) {
    				progressHorizontal.incrementSecondaryProgressBy(1);
    				// Title progress is in range 0..10000
    				setSecondaryProgress(100 * progressHorizontal.getSecondaryProgress());
    			}
    		});
    
    		button = (Button) findViewById(R.id.decrease_secondary);
    		button.setOnClickListener(new Button.OnClickListener() {
    			public void onClick(View v) {
    				progressHorizontal.incrementSecondaryProgressBy(-1);
    				// Title progress is in range 0..10000
    				setSecondaryProgress(100 * progressHorizontal.getSecondaryProgress());
    			}
    		});
    
    	}
    
    }

    展开全文
  • 而后设置动画对象时,value每次变化时,调用postInvalidate()通知视图重绘,从而再次调用onDraw()…如此循环,从而实现绘制动画。 2.使用 实际使用效果: 2.1代码解释 2.1.1 动画控制 private int animProgress = ...

    1.简述

    自定义view绘制动画原理就是,定义一个value值,值随着动画进度改变而改变;在onDraw()中,绘制时使其中某个或多个参数值*value/100(假设设置动画进度最大值100);而后设置动画对象时,value每次变化时,调用postInvalidate()通知视图重绘,从而再次调用onDraw()…如此循环,从而实现绘制动画。

    2.使用

    实际使用效果:

    2.1代码解释

    2.1.1 动画控制

        private int animProgress = 0;//定义一个 跟随动画进度变化的value值
        private ValueAnimator mAnimtor  ;
        public void startAnim(){
            if (mAnimtor == null){
                mAnimtor = ValueAnimator.ofInt(0,100);
                mAnimtor.setDuration(800);//动画持续时长
                mAnimtor.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        animProgress = (int) valueAnimator.getAnimatedValue();
                        postInvalidate();
                    }
                });
            }
            mAnimtor.start();
        }
    

    2.1.2初始化绘制

        private Paint mPaint;
        private Path mPath;
    
        public DiyViewAnim(Context context) {
            super(context);
            mPaint = new Paint();
            mPath = new Path();
        }
    
        public DiyViewAnim(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
            mPaint = new Paint();
            mPath = new Path();
        }
    

    2.1.3根据value值动态绘制

    其中条形图绘制数值意义可参考自定义view(4):自绘式

     @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            mPaint.reset();
            mPath.reset();
            //1.画坐标轴
            mPaint.setColor(Color.parseColor("#404040"));
            mPaint.setStyle(Paint.Style.STROKE);
            mPath.moveTo(120, 120);//y轴顶点(120,120)
            mPath.rLineTo(0, 600);//y轴方向
            mPath.rLineTo(800, 0);//x轴方向
            canvas.drawPath(mPath, mPaint);//绘制
            //2.画x轴label
            mPaint.reset();
            mPaint.setColor(Color.parseColor("#404040"));
            mPaint.setTextSize(18);//px
            mPaint.setStyle(Paint.Style.FILL);
            //假数据
            canvas.drawText("1月", 120 + 20, 120 + 600 + 28, mPaint);
            canvas.drawText("2月", 120 + 20 * 2 + 60 * (2 - 1), 600 + 120 + 28, mPaint);
            canvas.drawText("3月", 120 + 20 * 3 + 60 * (3 - 1), 600 + 120 + 28, mPaint);
            //3.画条形图
            float[] lines = {
                    120 + 20 * (1) + 60 * ((1) - 1 + 0.5f),
                      600 + 120,
                    120 + 20 * (1) + 60 * ((1) - 1 + 0.5f),
                    600 + 120 - 180*animProgress/100,
                    120 + 20 * (2) + 60 * ((2) - 1 + 0.5f),
                    600 + 120,
                    120 + 20 * (2) + 60 * ((2) - 1 + 0.5f),
                    600 + 120 - 420*animProgress/100,
                    120 + 20 * (3) + 60 * ((3) - 1 + 0.5f),
                    600 + 120,
                    120 + 20 * (3) + 60 * ((3) - 1 + 0.5f),
                    600 + 120 - 140*animProgress/100
            };
            mPaint.reset();
            mPaint.setColor(Color.parseColor("#6ce4d8"));
            mPaint.setStrokeWidth(60);
            canvas.drawLines(lines, mPaint);
        }
    

    2.2 xml使用

            <com.cupster.base_super_resource.DiyViewAnim
                android:id="@+id/diy_chart"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                />
    
             DiyViewAnim diyChart = findViewById(R.id.diy_chart);
             diyChart.startAnim();
    

    3.完整View代码

    package com.cupster.base_super_resource;
    
    import android.animation.ValueAnimator;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.View;
    
    import androidx.annotation.Nullable;
    
    public class DiyViewAnim extends View {
        public DiyViewAnim(Context context) {
            super(context);
            mPaint = new Paint();
            mPath = new Path();
        }
    
        public DiyViewAnim(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
            mPaint = new Paint();
            mPath = new Path();
        }
    
        public DiyViewAnim(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            mPaint = new Paint();
            mPath = new Path();
        }
    
        public DiyViewAnim(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
            mPaint = new Paint();
            mPath = new Path();
        }
    
        private Paint mPaint;
        private Path mPath;
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            mPaint.reset();
            mPath.reset();
            //1.画坐标轴
            mPaint.setColor(Color.parseColor("#404040"));
            mPaint.setStyle(Paint.Style.STROKE);
            mPath.moveTo(120, 120);//y轴顶点(120,120)
            mPath.rLineTo(0, 600);//y轴方向
            mPath.rLineTo(800, 0);//x轴方向
            canvas.drawPath(mPath, mPaint);//绘制
            //2.画x轴label
            mPaint.reset();
            mPaint.setColor(Color.parseColor("#404040"));
            mPaint.setTextSize(18);//px
            mPaint.setStyle(Paint.Style.FILL);
            //假数据
            canvas.drawText("1月", 120 + 20, 120 + 600 + 28, mPaint);
            canvas.drawText("2月", 120 + 20 * 2 + 60 * (2 - 1), 600 + 120 + 28, mPaint);
            canvas.drawText("3月", 120 + 20 * 3 + 60 * (3 - 1), 600 + 120 + 28, mPaint);
            //3.画条形图
            float[] lines = {
                    120 + 20 * (1) + 60 * ((1) - 1 + 0.5f),
                      600 + 120,
                    120 + 20 * (1) + 60 * ((1) - 1 + 0.5f),
                    600 + 120 - 180*animProgress/100,
                    120 + 20 * (2) + 60 * ((2) - 1 + 0.5f),
                    600 + 120,
                    120 + 20 * (2) + 60 * ((2) - 1 + 0.5f),
                    600 + 120 - 420*animProgress/100,
                    120 + 20 * (3) + 60 * ((3) - 1 + 0.5f),
                    600 + 120,
                    120 + 20 * (3) + 60 * ((3) - 1 + 0.5f),
                    600 + 120 - 140*animProgress/100
            };
            mPaint.reset();
            mPaint.setColor(Color.parseColor("#6ce4d8"));
            mPaint.setStrokeWidth(60);
            canvas.drawLines(lines, mPaint);
        }
        
        private int animProgress = 0;
        private ValueAnimator mAnimtor  ;
        public void startAnim(){
            if (mAnimtor == null){
                mAnimtor = ValueAnimator.ofInt(0,100);
                mAnimtor.setDuration(800);
                mAnimtor.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        animProgress = (int) valueAnimator.getAnimatedValue();
                        postInvalidate();
                    }
                });
            }
            mAnimtor.start();
        }
    }
    
    
    展开全文
  • Android ProgressBar 分为水平进度条和圆形进度条, 看官方的划分是Indeterminate ...不确定模式是进度条的默认模式,它显示循环动画,但未指示特定的进度 这也就是官方的圆形进度条一直在旋转的原因吧 Determinate ..
  • Android ProgressBar

    2017-06-07 21:32:21
    ProgressBar是Android的进度条. 一、说明  在某些操作的进度中的...在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。 二、XML重要属性  android:progressBarSt
  • ProgressBar是Android的进度条。体验效果 下面详细介绍ProgressBar一、说明在某些...在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。二、XML重要属性android:progressBarStyl...
  • Android ProgressBar详解

    2018-05-16 09:59:10
    android:indeterminate是否允许使用不确定模式,在不确定模式下,进度条动画无限循环android:indeterminateBehavior定义当进度达到最大时,不确定模式的表现;该值必须为repeat或者cycle,repeat表示进度从0重新开.....
  • Android中ProgressBar进度条

    千次阅读 2014-07-16 16:09:19
    在某项延续性工作的进展过程中为了不让用户觉得程序失去响应,需要有个活动的进度条,表示此过程正在进行中,...在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。 XML重要属性与
  • Android progressbar 详解

    2016-06-28 12:33:00
    [原文Android学习笔记(十六)进度条]ProgressBarXML属性...android:indeterminate是否允许使用不确定模式,在不确定模式下,进度条动画无限循环android:indeterminateBehavior定义当进度达到最大时,不确定模式的表...
  • android基础进度条原理

    2017-11-27 11:32:00
    下面详细介绍ProgressBar 一、说明  在某些操作的进度中的可视指示器,为用户...在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。 二、XML重要属性  android:progressBar...
  • android 自定义ProgressBar

    2014-02-12 15:29:49
    在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中 1、android.widget. ProgressBar,...
  • Android 控件之ProgressBar进度条 ProgressBar是Android的进度条。体验效果 ... 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,...在不确定模式下,进度条显示循环动画。这...
  • Android之进度条的使用

    千次阅读 2013-04-06 02:00:47
    1.默认进度条,这种模式,进度条循环显示动画,这种进度条一般应用于执行的任务的长度不确定。XML属性:android:progressBarStyle。 2.水平进度条,可以呈现操作的进度,它还有一个第二进度条(次要进度条)用来...
  • 环形动画加载视图...该视图采用循环的环形动画显示加载进度。同时,开发者可以设置在视图中心位置是否显示加载百分比。根据加载是否成功,提供加载成功和失败两种显示结果。 ...
  • Android 开发技巧

    热门讨论 2012-03-26 10:24:42
    6、ANDROID UI 动画 160 6.1、四种2D动画 160 6.1.1、透明度控制动画效果 alpha 160 6.1.2、旋转动画效果 rotate 161 6.1.3、尺寸伸缩动画效果 scale 162 6.1.4、位置转移动画效果 translate 163 6.1.5、四种动画...
  • Android常见控件之ProgressBar

    千次阅读 2011-04-09 17:13:00
    在不确定模式下,进度条显示循环动画。如果不设置进度条的样式,默认是不确定进度样式,画面不会随着进度的不同而变化。 ProgressBar的样式有以下四种: android:progressBarStyle:默认进度条样式,不确定模式 ...
  • progressBar说明 在某些操作的进度中的...在不确定模式下,进度条显示循环动画。这样的模式经常使用于应用程序使用任务的长度是未知的。 XML重要属性 android:progressBarStyle:默认进度条样式 android:prog...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
热门标签
关键字:

android循环进度动画