Android: Start The Circular Progress Bar From Top (270°)


Answer :

Try specifying rotation degrees to your progress items.

<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >     <item android:id="@android:id/progress">         <rotate             android:fromDegrees="270"             android:toDegrees="270"             android:pivotX="50%"             android:pivotY="50%" >             <shape                 android:innerRadiusRatio="2.5"                 android:shape="ring"                 android:thicknessRatio="25.0" >                 <gradient                     android:centerColor="@color/gray"                     android:endColor="@color/gray"                     android:startColor="@color/gray"                     android:type="sweep" />             </shape>         </rotate>     </item>     <item android:id="@android:id/secondaryProgress">         <rotate             android:fromDegrees="270"             android:toDegrees="270"             android:pivotX="50%"             android:pivotY="50%" >             <shape                 android:innerRadiusRatio="2.5"                 android:shape="ring"                 android:thicknessRatio="25.0" >                 <gradient                     android:centerColor="@color/green"                     android:endColor="@color/green"                     android:startColor="@color/green"                     android:type="sweep" />             </shape>         </rotate>     </item> </layer-list>     

You can also apply a rotation to your ProgressBar in layout XML. In your case -90° would solve your problem.

    <ProgressBar         android:id="@+id/progressDemo"         style="?android:attr/progressBarStyleHorizontal"         android:layout_width="152dp"         android:layout_height="152dp"         android:layout_centerInParent="true"         android:indeterminate="false"         android:progress="10"         android:rotation="-90"         android:progressDrawable="@drawable/circular_progress_bar" /> 

Here's how I made circular progressbar with percentage inside circle in pure code without any library.

Reference is taken from here : circular progress bar android

enter image description here

first create a drawable file called circular.xml

<?xml version="1.0" encoding="utf-8"?>  <layer-list xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@android:id/secondaryProgress">         <shape             android:innerRadiusRatio="6"             android:shape="ring"             android:thicknessRatio="20.0"             android:useLevel="true">               <gradient                 android:centerColor="#999999"                 android:endColor="#999999"                 android:startColor="#999999"                 android:type="sweep" />         </shape>     </item>      <item android:id="@android:id/progress">         <rotate             android:fromDegrees="270"             android:pivotX="50%"             android:pivotY="50%"             android:toDegrees="270">              <shape                 android:innerRadiusRatio="6"                 android:shape="ring"                 android:thicknessRatio="20.0"                 android:useLevel="true">                   <rotate                     android:fromDegrees="0"                     android:pivotX="50%"                     android:pivotY="50%"                     android:toDegrees="360" />                  <gradient                     android:centerColor="#00FF00"                     android:endColor="#00FF00"                     android:startColor="#00FF00"                     android:type="sweep" />              </shape>         </rotate>     </item> </layer-list> 

Now in your activity_main.xml add following:

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="@color/dialog"     tools:context="com.example.parsaniahardik.progressanimation.MainActivity">      <ProgressBar          android:id="@+id/circularProgressbar"         style="?android:attr/progressBarStyleHorizontal"         android:layout_width="250dp"         android:layout_height="250dp"         android:indeterminate="false"         android:max="100"         android:progress="50"         android:layout_centerInParent="true"         android:progressDrawable="@drawable/circular"         android:secondaryProgress="100"         />      <ImageView         android:layout_width="90dp"         android:layout_height="90dp"         android:background="@drawable/whitecircle"         android:layout_centerInParent="true"/>      <TextView         android:id="@+id/tv"         android:layout_width="250dp"         android:layout_height="250dp"         android:gravity="center"         android:text="25%"         android:layout_centerInParent="true"         android:textColor="@color/colorPrimaryDark"         android:textSize="20sp" />  </RelativeLayout> 

In activity_main.xml I have used one circular image with white background to show white background around percentage. Here is the image:

enter image description here

You can change color of this image to set custom color around percentage text.

Now finally add following code to MainActivity.java :

import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.animation.DecelerateInterpolator; import android.widget.ProgressBar; import android.widget.TextView;  public class MainActivity extends AppCompatActivity {      int pStatus = 0;     private Handler handler = new Handler();     TextView tv;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          Resources res = getResources();         Drawable drawable = res.getDrawable(R.drawable.circular);         final ProgressBar mProgress = (ProgressBar) findViewById(R.id.circularProgressbar);         mProgress.setProgress(0);   // Main Progress         mProgress.setSecondaryProgress(100); // Secondary Progress         mProgress.setMax(100); // Maximum Progress         mProgress.setProgressDrawable(drawable);        /*  ObjectAnimator animation = ObjectAnimator.ofInt(mProgress, "progress", 0, 100);         animation.setDuration(50000);         animation.setInterpolator(new DecelerateInterpolator());         animation.start();*/          tv = (TextView) findViewById(R.id.tv);         new Thread(new Runnable() {              @Override             public void run() {                 // TODO Auto-generated method stub                 while (pStatus < 100) {                     pStatus += 1;                      handler.post(new Runnable() {                          @Override                         public void run() {                             // TODO Auto-generated method stub                             mProgress.setProgress(pStatus);                             tv.setText(pStatus + "%");                          }                     });                     try {                         // Sleep for 200 milliseconds.                         // Just to display the progress slowly                         Thread.sleep(8); //thread will take approx 1.5 seconds to finish                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                 }             }         }).start();     } } 

If you want to make horizontal progressbar, follow this link, it has many valuable examples with source code:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar


Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?