Вы можете
- используйте
TableLayout
внутри HorizontalScrollView
или
- придерживайтесь вашего подхода с горизонтальным
LinearLayout
, но добавляя вертикальные LinearLayout
s вместо непосредственно изображений. Например, добавив три-четыре изображения на каждую вертикальную LinearLayout
в портретной ориентации и перерисовав, добавив только две в альбомной ориентации.
Сначала я бы попробовал подход TableLayout
.
PS1: в следующий раз попробуйте удалить весь не относящийся к делу код (чем меньше кода, тем легче понять, что вы сделали).
PS2: Помните, что System.out
обычно перенаправляется на /dev/null
и, таким образом, теряется, поэтому я настоятельно рекомендую вам использовать Log.d
.
Полный пример
Адаптируйте это к методу onCreate () или везде, где вам это нужно:
public void horizontalScrollGalleryLayout () {
HorizontalScrollView sv = new HorizontalScrollView(this);
LinearLayout llh = new LinearLayout(this);
llh.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams layoutParamsTV = new LinearLayout.LayoutParams(40, 40);
LinearLayout.LayoutParams layoutParamsLL = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
for (int i=0; i<20; i++) {
LinearLayout llv = new LinearLayout(this);
llv.setOrientation(LinearLayout.VERTICAL);
TestView testView1 = new TestView(this, Color.rgb(i*12, 0, 0));
TestView testView2 = new TestView(this, true, Color.rgb(i*12, i*12, 0));
TestView testView3 = new TestView(this, true, Color.rgb(0, i*12, 0));
llv.addView(testView1, layoutParamsTV);
llv.addView(testView2, layoutParamsTV);
llv.addView(testView3, layoutParamsTV);
llh.addView(llv, layoutParamsLL);
}
sv.addView(llh, layoutParamsLL);
setContentView(sv);
}
Я использую очень простой вид в качестве примера:
public class TestView extends View {
Context context;
int color;
public TestView(Context context, int color) {
super(context);
this.context = context;
this.color = color;
}
@Override
public void onDraw (Canvas canvas) {
super.onDraw(canvas);
this.setBackgroundColor(Color.LTGRAY);
Paint paint = new Paint (Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
canvas.drawCircle(20, 20, 20, paint);
}
}