2012-07-05 3 views
5

Я хотел бы создать петлю где-нибудь в своем Android-коде, который изменяет цвет рисованного прямоугольника между двумя цветами непрерывно с определенной скоростью. Я хотел бы начать и остановить его мигание с помощью двух кнопок. Я провел много исследований, но просто не могу понять, как это сделать. Я новичок в android и не имею опыта работы с методами run(). Но я предполагаю, что мне нужно сделать какой-то класс прямоугольников с помощью метода run(), который будет анимировать его в изменении цветов.Animate Shape Color в Android

ответ

1

Я также довольно новичок в android, но я дам ему шанс.

Поскольку вы говорите, что хотите, чтобы он мигал, вы должны иметь возможность переключать фактическое изображение между, скажем, синим и красным, с простым циклом «для». Когда кнопка нажата, вы можете изменить статус логического значения от false до значения true. Затем, когда оператор «for» больше не верен, он переходит к следующему набору кода, который останавливает его. Вот что я буду делать.

Ваш XML для двух кнопок:

<Button 
    android:id="@+id/start" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Start" 
    android:Clickable="true" 
    android:onClick="start" 
    /> 

<Button 
    android:id="@+id/stop" <!-- Gives the button an ID to use in java code --> 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Stop" <!-- sets the text on the button --> 
    android:Clickable="true" <!-- makes the button clickable --> 
    android:onClick="stop" <!-- The method it calls when it is clicked, removes the necessity of an OnClickListener --> 
    /> 

Теперь, вы бы 2 ImageViews: blue_rectangle и red_rectangle, как в том же месте, в макете. Вот XML для двух ImageViews

<ImageView 
android:id="@+id/blue_rectangle" 
android:layout_width="100dp" 
android:layout_height="75dp" 
android:layout_marginLeft="50dp" 
android:layout_marginTop="5dp" 
android:src="@drawable/blue_rectangle" /> 

<ImageView 
android:id="@+id/red_rectangle" 
android:layout_width="100dp" 
android:layout_height="75dp" 
android:layout_marginLeft="50dp" 
android:layout_marginTop="5dp" 
android:src="@drawable/red_rectangle" /> 

Эта следующая часть - сложная часть.

Здесь находится Java.

package your.package.name.thingy.here; 

//everything it tells you to import goes here 

public class BlinkingActivity extends Activity{ 

ImageView blueRectangle; 
ImageView redRectangle; 
Button start; 
Button stop; 

    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yourLayout); 

    blueRectangle = (ImageView) findViewById(R.id.blue_rectangle); 
    redRectangle = (ImageView) findViewById(R.id.red_rectangle); 
    start = (Button) findViewById(R.id.start); 
    stop = (Button) findViewById(R.id.stop); 
    Boolean isBlinking = new Boolean(false); 

    blinkRectangle(whateverVariableThisNeeds); 

} 

public static void blinkRectangle(View view){ 

blueRectangle.setVisibility(View.INVISIBLE); 
redRectangle.setVisibility(View.INVISIBLE); 

for(initialization; isBlinking; update){ 

    blueRectangle.setVisibility(View.VISIBLE); 

    blueRectangle.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    blueRectangle.setVisibility(View.INVISIBLE); 
    } 
    }, 2000); //the 2000 is the number of milliseconds for how long blue is visible 
    redRectangle.setVisibility(View.VISIBLE); 

    redRectangle.postDelayed(new Runnable() { 
    @Override 
    public void run(){ 
    redRectangle.setVisibility(View.INVISIBLE); 
    } 
    }, 2000); 

    blueRectangle.setVisibility(View.VISIBLE); //This prevents a bug where if the user hits the stop button at just the right time, both rectangles will be invisible. 
} 


public static void start(View view){ //no need to call this anywhere, the XML onClick does it for you 

isBlinking = true; //I think this is how you set a boolean, if not, correct me. 

} 

public static void stop(View view){//same here 

isBlinking = false; //again, correct me if I'm wrong. 

} 

} 

Вот что делает код в основном.

У этого есть логическое значение, которое по умолчанию установлено false. Хотя это неверно, прямоугольник не мигает. Хотя это верно, работает оператор for в blinkRectangle(). То, что петля for делает синюю видимой, ждет 2 секунды, делает ее невидимой, делает красную видимой, ждет две секунды и повторяет. Методы start() и stop() переключают логические значения на true и false соответственно. Я думаю, что этот тип цикла for переустанавливает логическое значение, когда он возвращается к вершине. Я никогда с ним не работал. Это то, что я мог собрать с сайта, на который я смотрел.

Ну, я думаю, что об этом. Если вы не понимаете, что делает какой-либо код, или он не работает, или у меня есть вопрос не так, или я просто совершенно ошибаюсь, или НИЧЕГО, просто прокомментируйте этот ответ. Надеюсь, это сработает!

Удачи!

P.S. Вот сайты, которые я использовал для справки

http://www.tutorialspoint.com/java/java_loop_control.htm

http://www.java-examples.com/java-boolean-example

Ого ... Я просто понял, этот вопрос 2-х лет. Тем не менее, я надеюсь, что это поможет вам!

+0

Не беспокойтесь, вы [получите значки для этого] (http://stackoverflow.com/questions/10874571/how-does-check-ajax-referer-really-work/18358174#comment27016156_18358174) ([Некромант] (http://stackoverflow.com/help/badges/17/necromancer)), и upvotes подтвердят его полезность;) – brasofilo