Androidコードのどこかに、描画可能な長方形の色を2つの色の間で一定の割合で連続的に変更するループを作成したいと思います。2つのボタンを使用して点滅を開始および停止したいと思います。私はたくさんの研究をしましたが、どうやってそれをするのか理解できないようです。私はAndroidを初めて使用し、run()メソッドの経験がありません。しかし、run()メソッドを使用して、ある種の長方形クラスを作成し、色を変化させるようにアニメーション化する必要があると思います。
1 に答える
私もAndroidにはかなり慣れていませんが、試してみます。
点滅させたいと言っているので、単純な「for」ループを使用して、実際の画像を青と赤の間で切り替えることができるはずです。ボタンが押されると、ブール値のステータスを false から true に変更できます。次に、「for」ステートメントが真でなくなると、次のコード セットにジャンプして停止します。これが私がすることです。
2 つのボタンの 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
がレイアウトの同じ場所に配置されます。2 つの ImageView の XML は次のとおりです。
<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" />
この次の部分はトリッキーな部分です。
こちらがジャバです。
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に設定されているブール値があります。false の間、長方形は点滅しません。それは本当ですが、for
ステートメントはblinkRectangle()
実行されます。このfor
ループは、青のオンを表示し、2 秒待って非表示にし、赤を表示し、2 秒待ってから繰り返します。start()
およびメソッドはstop()
、ブール値をそれぞれ true および false に切り替えます。for
このタイプのループは、先頭に戻ったときにブール値を再チェックしていると思います。私は以前にそれを使ったことがありません。それは私が見たウェブサイトから収集できたものです。
まあ、それでいいと思います。コードの機能が理解できない場合、または機能しない場合、または質問が間違っている場合、またはまったく間違っている場合、または何かがある場合は、この回答にコメントしてください。これがうまくいくことを願っています!
幸運を!
PS 参考にしたサイトはこちら
http://www.tutorialspoint.com/java/java_loop_control.htm
http://www.java-examples.com/java-boolean-example
うわー...この質問が2年前のものだと気付きました。それでも、これがお役に立てば幸いです。