0

Android用のタイマーアプリケーションを作成しています。指定された時間(つまり8分)から0までカウントダウンします。

アプリの起動時に指定された時刻が表示されるようにコーディングしました。表示している時刻をクリックすると、カウントダウンが始まり、イベントでのTextView更新が始まります。もう一度クリックすると、カウントダウンが停止し、残りのミリ秒を保存して、次にクリックしたときに再開します(基本的に時計を一時停止します)。TextViewonTick()TextViewTextView

すべてが期待どおりに機能します。ただし、TextViewクリックすると、クリックが解除されるまで消えます。クリックを3秒間押し続けると、押してTextViewいる間は完全に消え、離すとすぐに再表示されます。

この動作を停止して、常に価値を示し続けるにはどうすればよいTextViewですか?

編集:

    tvPeriod.setOnLongClickListener( new View.OnLongClickListener() {           
        @Override
        public boolean onLongClick(View v) {
            valPeriod = 1;
            tvPeriod.setText( tvPeriodPrefix + "1" );

            return true;
        }
    });
4

2 に答える 2

0

おそらく、背景を色に設定したり、透明に設定したりすることができます。実際には下位レベルでは、ボタンはTextViewの子孫であるため、ボタンのように機能する理由を説明している可能性があります。

于 2012-12-13T17:56:17.610 に答える
0

このサンプルコードで試してみてください。

import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity extends Activity {
    TextView tv;
    CountDownTimer countDownTimer;
    boolean isRunning = false;
    long remainingTime = 90000;
    long elapsedTime = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.tv1);
        tv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (isRunning) {
                    isRunning = false;
                    countDownTimer.cancel();
                    remainingTime = elapsedTime;
                } else {
                    countDownTimer = new CountDownTimer(remainingTime, 1000) {

                        public void onTick(long millisUntilFinished) {
                            elapsedTime = millisUntilFinished;
                            tv.setText("seconds remaining: "
                                    + millisUntilFinished / 1000);

                        }

                        public void onFinish() {
                            tv.setText("done!");
                        }
                    }.start();
                    isRunning = true;
                }

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
于 2013-01-07T06:15:08.703 に答える