如何动态地从addView()方法获取每个视图?

问题描述 投票:0回答:1

所以我有一个布局,里面有adapterViewFlipper。然后,我使用addView()方法在主布局视图的顶部设置了进度条,所以当adapterViewFlipper的布局为:4时,我的进度条也为4。但是每个布局都会根据每个进度条而变化,我的进度条会运行其中4个同时显示。 Here is the result of my code look like.

这是我的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一样。我该如何解决?谢谢。

android view progress-bar viewflipper
1个回答
0
投票

您应该在addOnLayoutChangeListener中显示Progreess Bar

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();
        } else {
           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);
        }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.