Android, Как изменить цвет фона внутри той же активности - PullRequest
1 голос
/ 07 марта 2011

Чтобы дать вам некоторое представление о моей проблеме, я потратил много времени на эту проблему, но большинство вопросов, которые я задавал, касаются различных способов, которые, как я думал, будут работать, но я никогда не спрашивал, что будет самым простым способом это случилось.

Чтобы показать, сколько работы я проделал, вот несколько вопросов о переполнении стека, которые я отправил, пытаясь различными способами выполнить эту задачу.

Наконец, вот некоторые из вещей, которые я пробовал. Мой первоначальный ответ состоял в том, что это было бы чрезвычайно просто, и я мог просто вызывать setContentView каждый раз, когда я хотел измениться, но ясно, что это не так. Во-вторых, я пытался установить разные вещи как bacgkround, редактировать этот объект и надеяться, что он изменится. Не сработало Затем я посмотрел на вещи, которые предоставляет Android, такие как

ViewFlippers: Я мог бы изменить все, кроме фона.

State List Drawable: Я не очень хорошо их реализовал, возможно, это была моя вина?

Покадровая анимация: Обратите внимание, у меня есть вопрос переполнения стека относительно этого ... нужно больше?

Само собой разумеется, я понял, что я слишком усердно, чтобы сделать задачу, нужно всего 3-5 строк кода. Так Прошу предложений.

1 Ответ

0 голосов
/ 07 марта 2011

Мое решение было бы создать пользовательский объект View.Ключевым моментом здесь будет переопределение функции onDraw, в которой функция просто рисует на холсте нужный вам цвет.Это должно быть действительно просто.

Пожалуйста, попробуйте это и дайте мне знать, если у вас есть какие-либо вопросы ... вот несколько указателей ...

В вашем объекте просмотра ...

public class MyView extends View {
  @Override protected void onDraw(Canvas canvas) {
    canvas.drawColor(mColor); 
  }

  private int mColor = 0xff000000; //black
  public void SetColor(int aColor) {
    mColor = aColor;
    invalidate(); //Not sure about this line, can't remember if this is the correct call... there is a call that causes a redraw
  }
}

В вашем макете деятельности XML ...

<your.package.name.ClassName
    android:id="@+id/ClassName1"
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"/>

В вашем коде активности ...

@Override public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.yourxmllayoutfile);
  MyView aMyView = (MyView) findViewById(R.id.ClassName1);
  aMyView.SetColor(0xff00ff00); //Green I think, this line changes the color
}

Удачи:)

...