Я хотел бы создать петлю где-нибудь в своем Android-коде, который изменяет цвет рисованного прямоугольника между двумя цветами непрерывно с определенной скоростью. Я хотел бы начать и остановить его мигание с помощью двух кнопок. Я провел много исследований, но просто не могу понять, как это сделать. Я новичок в android и не имею опыта работы с методами run(). Но я предполагаю, что мне нужно сделать какой-то класс прямоугольников с помощью метода run(), который будет анимировать его в изменении цветов.Animate Shape Color в Android
ответ
Я также довольно новичок в 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-х лет. Тем не менее, я надеюсь, что это поможет вам!
- 1. Matplotlib animate fill_between shape
- 2. 3 js animate shape
- 3. shape back color
- 4. AngularJs animate background color/color
- 5. animate rect color change
- 6. Cytoscape.js Animate Node Color
- 7. JQuery Scroll Animate Color
- 8. Jquery animate navigation color
- 9. Mootools animate background-color
- 10. jQuery animate font color
- 11. WPF Animate border background color
- 12. JQuery help - animate background color
- 13. jQuery background color animate toggle
- 14. Android multi shape drawable
- 15. Android Button Border Color
- 16. animate background color of multiple TextViews
- 17. Android include shape in xml
- 18. SVG to Android Shape
- 19. Android Draw Custom Shape
- 20. Android Drawable overlay shape
- 21. Android canvas hidden shape
- 22. Android Line Shape
- 23. item radius shape android
- 24. issue: display shape android
- 25. Custom EditText Shape Android
- 26. Android Shape Custom Rectangle
- 27. Android - Dynamic Mask Shape
- 28. Android spinner popup text color
- 29. Android Custom shape для EditText
- 30. Powerpoint change shape outline/fill color with animation
Не беспокойтесь, вы [получите значки для этого] (http://stackoverflow.com/questions/10874571/how-does-check-ajax-referer-really-work/18358174#comment27016156_18358174) ([Некромант] (http://stackoverflow.com/help/badges/17/necromancer)), и upvotes подтвердят его полезность;) – brasofilo