2016-08-16 2 views
1

Это было какое-то время, когда я застрял в этом. #newbieAndroidDeveloperКруговой индикатор прогресса, не охватывающий все свободное пространство

Я работаю над круговым индикатором выполнения. Проблема заключается в том, что анимационный круг не использует доступное пространство индикатора выполнения.

Снимок экрана должен объяснить проблему.

enter image description here

Синий неполный круг круговой прогресс бар. Желтый квадрат - это фон индикатора выполнения. Красная стрелка - это неиспользуемое пространство, которое вызывает озабоченность.

Размер индикатора прогресса и фона задается с помощью кода. Я хочу, чтобы круговой индикатор выполнения использовал все пространство.

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 (вытяжке форма)

<?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> 

На самом деле в этой деятельности есть и другие элементы. Я удалил их, чтобы сосредоточиться на проблеме. Любая помощь очень ценится.

+0

попробуйте добавить в панель прогресса: android: layout_margin = "0dp" android: padding = "0dp" – X3Btel

+0

Нет. Это не помогло. После добавления этого изменения пользовательский интерфейс не изменился. –

ответ

1

Несмотря на то, что я не нашел ответ, почему он не использует неиспользуемое пространство, я нашел еще одну классную библиотеку прогресса, которая крута. ProgressWheel.

Это действительно настраиваемый. Вы можете самостоятельно регулировать размер круга прогресса независимо от фона, который вы не можете сделать с помощью встроенного инструмента поддержки android. Это решает мою проблему.

enter image description here

Надеется, что это поможет кому-то. Но мне все же любопытно, почему балл по умолчанию для android не использует все пространство, как указано в вопросе. Любые подсказки снова приветствуются.

Смежные вопросы