所以我知道有很多像这样的问题,但没有一个答案有任何效果。Android:自定义视图确实绘制了
我有一个自定义View
,我试图将其放入ScrollView
(全部以编程方式)。 ScrollView
本身工作正常,是它需要的地方,做它应该做什么,并通过添加一个TextView
进行测试,仍然做它应该的。
但是,当我创建我的自定义View
视图不绘制,它就好像什么都没有。从来没有调用draw(Canvas canvas)
方法(即使我不知道区别是什么,但它仍然不起作用,也尝试使用onDraw
)。
我在构造函数中尝试了一些东西,如View.invalidate()
,每次我想绘制/重绘时,没有任何东西显示正在工作。
下面是相关代码:
滚动型初始化
sv = new ScrollView(env.getContext());
ScaledBounds sb = UsefulMethods.getScaledBounds(50, 200, BBEnvironment.WIDTH - 100, BBEnvironment.HEIGHT - 300);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(sb.getWidth(), sb.getHeight());
sv.setTranslationX(sb.getX());
sv.setTranslationY(sb.getY());
sv.setLayoutParams(params);
sv.setScrollbarFadingEnabled(false);
sv.setScrollBarSize(0);
sv.setBackgroundColor(Color.argb(150, 0, 255, 0));
自定义视图类
private class LevelSelectionView extends View {
private ArrayList<LevelButton> levelButtons;
public LevelSelectionView(Context context) {
super(context);
levelButtons = new ArrayList<LevelButton>();
int x = 20;
int y = 20;
for(int i = 0; i < 20; i++) {
levelButtons.add(new LevelButton(x, y, 100, 100, 10, i + 1));
levelButtons.get(i).unlock();
x += 100 + 20;
}
setWillNotDraw(false);
}
public void draw(Canvas canvas) {
super.draw(canvas);
System.out.println("is being called"); //except it isn't
Paint paint = new Paint();
paint.setAntiAlias(env.getCurrentSettings().getAntialias());
for(LevelButton lb : levelButtons)
lb.drawObject(canvas, paint);
}
}
创建并添加自定义视图
LevelSelectionView lsView = new LevelSelectionView(sv.getContext());
lsView.setLayoutParams(new RelativeLayout.LayoutParams(sv.getLayoutParams().width, 1000));
lsView.setBackgroundColor(Color.argb(150, 0, 0, 255));
sv.addView(lsView);
为什么它不绘图,我该如何绘制它?
你是怎么给ScrollView添加view的?你有没有试图设置颜色来绘制变量?自定义视图是否在xml中单独运行? – emiraslan
@emiraslan看起来像我削减了一些代码。使用'sv.addView(lsView)'将'View'添加到'ScrollView'中'注意:添加了相关代码 – Ryan
您应该重写onDraw(Canvas)而不是绘制。你可以在你创建的地方添加代码,并将CustomView添加到ScrollView中。 – Eselfar