2016-08-16 10 views
1

Es ist eine Weile her, dass ich damit fest bin. #newbieAndroidDeveloperCircular Fortschrittsbalken, der den gesamten verfügbaren Platz nicht abdeckt

Ich arbeite an einem kreisförmigen Fortschrittsbalken. Das Problem ist, dass der animierende Kreis den verfügbaren Platz der Fortschrittsleiste nicht nutzt.

Der Screenshot sollte das Problem erklären.

enter image description here

Der blaue unvollständige Kreis sind die kreisförmigen Fortschrittsbalken. Gelbes Quadrat ist der Hintergrund des Fortschrittsbalkens. Der rote Pfeil ist ungenutzter Platz, was Anlass zur Sorge gibt.

Die Größe der Fortschrittsanzeige und des Hintergrunds wird über den Code eingestellt. Ich möchte den kreisförmigen Fortschrittsbalken verwenden den gesamten Raum verwenden.

RaceLiveActivity.java

public class RaceLiveActivity extends AppCompatActivity { 
    Drawable drawable; 
    String length; 
    int len, totalDistance; 
    TextView textViewDistance, textViewTime, textViewSpeed; 
    FrameLayout raceFrame; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     totalDistance = 0; 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_race_live); 

     //TO FIND WIDTH AND HEIGHT OF PHONE SCREEN 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 

     //SET WIDTH AND HEIGHT 
     raceLiveActivity = this; 

     ProgressBar prog=(ProgressBar) findViewById(R.id.progressBar1); 
     FrameLayout.LayoutParams FrameLP1 = new FrameLayout.LayoutParams(displaymetrics.widthPixels-100 , displaymetrics.widthPixels -100); 
     FrameLP1.gravity = Gravity.CENTER; 
     prog.setBackgroundColor(Color.YELLOW); 
     prog.setLayoutParams(FrameLP1); 


     length = "1";//int1.getStringExtra("length"); 
     len = Integer.valueOf(length); 
     ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
     ObjectAnimator animation = ObjectAnimator.ofInt (progressBar, "progress", 0, 500); // see this max value coming back here, we animale towards that value 
     animation.setDuration (len * 60000); //in milliseconds 
     animation.setInterpolator (new DecelerateInterpolator()); 
     animation.start(); 
    } 
} 

activity_race_live.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/BackLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#FD4C0D"> 
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/RaceProress" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="3" 
     android:background="#FD4C0D" 
     > 
     <ProgressBar 
      android:id="@+id/progressBar1" 
      style="?android:attr/progressBarStyleHorizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:indeterminate="false" 
      android:progressDrawable="@drawable/circular_progress_bar" 
      android:progress="0" 
      ></ProgressBar> 

    </FrameLayout> 
</LinearLayout> 

circular_progress_bar.xml (drawable Form)

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="0" 
    android:toDegrees="0"> 
    <shape 
     android:shape="ring" 
     android:thickness="3dp" 
     android:useLevel="true"> 
     <gradient 
      android:angle="0" 
      android:endColor="#005B7F" 
      android:startColor="#005B7F" 
      android:type="sweep" 
      android:useLevel="false"> 
     </gradient> 
    </shape> 
</rotate> 

Tatsächlich gibt es andere Elemente in dieser Aktivität. Ich habe sie entfernt, um mich auf das Thema zu konzentrieren. Jede Hilfe wird sehr geschätzt.

+0

versuchen, die Fortschrittsleiste hinzuzufügen: Android: layout_margin = "0dp" android: padding = "0dp" – X3Btel

+0

Nein. Es hat nicht geholfen. Keine Änderung der Benutzeroberfläche nach dem Hinzufügen. –

Antwort

1

Obwohl ich die Antwort nicht gefunden habe, warum es nicht den ungenutzten Platz verwendet, fand ich eine andere coole Fortschrittsbalken-Bibliothek, die cool ist. ProgressWheel.

Es ist wirklich anpassbar. Sie können die Größe des Fortschrittskreises unabhängig vom Hintergrund anpassen, was mit dem Standard-Fortschrittsbalken von Android nicht möglich ist. Dies löst mein Problem.

enter image description here

Hoffe, dass es jemand hilft. Aber ich bin immer noch neugierig, warum der Standard-Fortschrittsbalken von Android nicht den gesamten Raum verbraucht, wie in der Frage erwähnt. Irgendwelche Hilfen sind wieder willkommen.

Verwandte Themen