所以我知道有很多像這樣的問題,但沒有一個答案有任何效果。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