3

我找不到有关如何执行此操作的提示或示例。我想在我已经绘制的 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);
    }
}
4

1 回答 1

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 组件,因为那是你最初的问题

您需要添加更多代码才能满足您的要求(来自提问者): 在此处输入图像描述

PS 这只是针对您的特定问题/要求的解决方案。我建议使用 ListView 组件,从重用视图的意义上说,它更好,因此在这种情况下,您将拥有大量定义视图实例,您的应用程序可能会变得不可用,因为活动类上的负载会太大.

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

于 2013-06-27T14:00:47.660 回答