Итак, у меня есть макет с адаптером ViewViewFlipper внутри. И я установил индикатор выполнения в верхней части основного вида макета с помощью метода addView()
, поэтому, когда макет адаптераViewViewFlipper имеет значение ex: 4, тогда мой индикатор выполнения также равен 4. Но вместо этого каждый макет изменяется в соответствии с каждым индикатором выполнения, мой индикатор выполнения запускается4 из них одновременно. Вот результат, похожий на мой код.
Вот мой MainActivity:
public class MainActivity extends AppCompatActivity {
private AdapterViewFlipper mViewFlipper;
private MyAdapter mAdapter;
private LinearLayout mLayout;
private ProgressBar progressBar;
private int childCount;
private String[] values = {"satu", "dua", "tiga", "empat"};
private int[] colors = {Color.BLUE, Color.GRAY, Color.GREEN, Color.RED};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewFlipper = findViewById(R.id.viewflipper);
mLayout = findViewById(R.id.layoutParent);
mAdapter = new MyAdapter(values, colors);
mViewFlipper.setAdapter(mAdapter);
mViewFlipper.setFlipInterval(2500);
childCount = mViewFlipper.getCount();
mViewFlipper.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
if (mViewFlipper.getDisplayedChild() == childCount - 1) {
mViewFlipper.stopFlipping();
}
}
});
mViewFlipper.startFlipping();
for (int i = 0; i < childCount; i++) {
View view = LayoutInflater.from(this).inflate(R.layout.progress, null);
view.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1));
progressBar = view.findViewById(R.id.bar);
setMargins(progressBar, 0, 0, 8, 0);
setProgressMax(progressBar, 100);
setProgressAnimate(progressBar, 100);
mLayout.addView(progressBar);
}
}
private void setProgressMax(ProgressBar pb, int max) {
pb.setMax(max * 1000);
}
private void setProgressAnimate(ProgressBar pb, int progressTo)
{
ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", pb.getProgress(), progressTo * 1000);
animation.setDuration(2500);
animation.setInterpolator(new LinearInterpolator());
animation.start();
}
private void setMargins (View view, int left, int top, int right, int bottom) {
if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(left, top, right, bottom);
view.requestLayout();
}
}
}
Что я действительно хочу, так это каждый прогрессбар для каждого макета. Например, когда выполняется первый индикатор выполнения, затем запускается второй индикатор выполнения и т. Д., Как у моего adapterViewFlipper. Как я могу это исправить? спасибо.