アプリケーションに現在の時刻を示す TextView があり、このように実装しました
private Handler handler = new Handler();
private Runnable runnable = new Runnable()
{
public void run()
{
batteryLevel();
if(clock_on == true) {
Handler clockUpdate = new Handler();
clockUpdate.postDelayed(new Runnable() {
public void run() {
executeClock();
}
}, 500);
}
handler.post(this);
}
public void executeClock() {
TextView timeTv = (TextView) findViewById(R.id.time);
long currentTime=System.currentTimeMillis();
Calendar cal=Calendar.getInstance();
cal.setTimeInMillis(currentTime);
String timeFormat24 = "%1$tH:%1$tM";
// String timeFormat12 = "%1$tI:%1$tM";
String showTime=String.format(timeFormat24,cal);
timeTv.setText(showTime);
}
私のアプリには、ScrollingTextView、ScrollingtextView.javaもあります
public class ScrollingTextView extends TextView {
public ScrollingTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ScrollingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollingTextView(Context context) {
super(context);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
}
<com.doublep.example.ScrollingTextView
android:id="@+id/txt_lcd_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="#f82424"
android:textSize="30dp" />
時計の TextView が表示されている場合、ScrollingTextView は機能しません。時計の可視性をなくすと、ScrollingTextView は完全に機能します
なぜこうなった?どうすれば修正できますか?
EDIT:クロックを遅らせると、ScrollingTextViewが機能し始めますが、クロックTextViewが現在の時刻に設定されるとすぐに、ScrollingTextViewは機能しなくなります
更新: 少しテストした後、ScrollingTextView が機能していることに気付きましたが、executeClock() メソッドが実行されるたびに、ScrollingTextView アニメーションがリセットされ、もう一度開始されます