将ProgressBar添加到自定义视图中

时间:2013-06-27 11:52:57

标签: android android-custom-view

我找不到有关如何执行此操作的提示或示例。我想在我已绘制的Rect上添加一个进度条,所以我该怎么做呢?

您的回答将真正受到赞赏! :)

被修改

public class MainView extends View {

    public MainView(Context context) {
        super(context);
    }

    public MainView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        logo.set(getPX(5), getPX(10), getPX(65), getPX(70));

        background.set(getPX(30), getPX(2), canvas.getWidth() - getPX(10),
                getPX(81));

        canvas.drawRect(background, paint);
        canvas.drawRect(logo, paint);
    }

    final private int getPX(float dp) {
        return (int) (getResources().getDisplayMetrics().density * dp);
    }
}

1 个答案:

答案 0 :(得分:1)

根据您的实施情况(如您所示):

<ScrollView .. >
    <LinearLayout .. >
        <MainView .. />
        <MainView .. />
        <MainView .. />
    </LinearLayout>
</ScrollView>

我建议的解决方案是 - 使用 LinearLayout 扩展您的 CustomView 类(因为您可以向自定义视图添加其他视图)

public class MainView extends LinearLayout {
    private Rect logo;
    private Rect background;

    public MainView(Context context) {
        super(context);

        setWillNotDraw(false);  //needed in order to call onDraw method

        logo = new Rect();
        background = new Rect();
    }

    public MainView(Context context, AttributeSet attrs) {
        super(context, attrs);

        setWillNotDraw(false);

        logo = new Rect();
        background = new Rect();

        RelativeLayout progressBarLayout = new RelativeLayout(context);
        RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.FILL_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        ProgressBar progressBar = new ProgressBar(context, null, R.attr.progressBarStyleHorizontal);
        progressBar.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
        progressBar.setIndeterminate(true); //remove that (only for demonstration purposes)
        lay.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        progressBarLayout.addView(progressBar, lay);

        addView(progressBarLayout);

       //Apart from the ProgressBar you are able to add as many views as you want to your custom view and align them as you would like
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        logo.set(getPX(5), getPX(10), getPX(65), getPX(70));

        background.set(getPX(30), getPX(2), canvas.getWidth() - getPX(10),
                getPX(81));

        canvas.drawRect(background, paint);
        canvas.drawRect(logo, paint);
    }

    final private int getPX(float dp) {
        return (int) (getResources().getDisplayMetrics().density * dp);
    }
}
  

在这个例子中,我只展示了如何添加ProgressBar组件,因为那是你原来的问题

您需要添加更多代码才能满足您的要求(来自提问者): enter image description here

P.S。这只是您特定问题/请求的解决方案。我建议使用ListView组件,它在重用视图方面更好,所以在你将拥有 LOTS OF 自定义视图实例的情况下,你的应用程序可能会变得无法使用,因为会有活动类的负担过重。

为了您迁移到使用 ListView 组件,请先尝试一些示例,例如this