2013-05-10 12 views
9

私が表示されたテキストを変更したい場合は、私はこれを行うどのくらいの頻度は混乱なしのTextViewを更新することができ

TextView tvSum = findViewById(R.id.sumTexviewId); 

のTextViewを仮定します、私は定期的にこれを行う想定し、今

tvSum.setText("£0.00"); 

をボタンが押されるたびに、おそらく入力された合計を表示すると言います。この例では、1つを押すと「1p」と表示され、次に2つを押すと「12p」と続きます。

私がこれを行うと、しばらくするとテキストが歪んでしまうことがわかりました。すべてを開始するシーケンス12345、のために良いです:

  • 0p(何もまだ押されていない)
  • 1p( "1" を押す)
  • 12pは(その後、 "2" を押す)
  • £1.23(その後、 "3" はその物事が厄介後、

ただし)を押す:

  • Mess: £12.34(その後、 "4" を押す)
  • Mess: £123.45(その後、 "5" を押す)

それは、任意のより良い以後なることはありません。コードは本当にシンプルなので、私はコードを投稿していません:ボタンの束と1つの短い文字列を1つのテキストビューに書き込むだけです - コード内の何もこれを引き起こすはずはありません。 (はい、書かれている文字列がToastに載せることで正しいかチェックしました)他の誰かがこれを見つけましたか?

+0

図面キャッシュを削除することをお勧めします(setDrawingCacheEnabled(false)) –

+0

これは非常に混乱します。あなたはそれで何か面白くしていないと確信していますか? – Ahmad

+0

はい、この時点で、問題を示す最小限の完全なプログラムを投稿できれば助けになると思います。 –

答えて

5

Mr.Meが正しい方向に向かっていて、テキストが変更されたときに背景がレンダリングされる方法と関係があることが判明しました。私は黄色のアウトラインの中に透明な背景を持つように(意図せずに)、色を0x00000000で設定しました。

何らかの理由で、完全に不透明でない塗りを適用すると、コンテンツを定義するのではなく、新しい背景が前の内容(約3ビットマップのサイクル)に配置されます。これはおそらく、Canvasが使用するデフォルトのPorterDuff転送モードによるものだと思います。私はこれを作業しながら出ている

ソリューション:

  1. は、不特定の背景を残します。これも透明ですが、何らかの理由で積極的にそうです。
  2. 完全なアルファバックグラウンドを持っています。 (透明性を必要とする場合は、下側:動作しません)
  3. onDrawをオーバーライドするカスタムビューを作成して、super.onDraw()を呼び出す前に、0x00でキャンバスを積極的に塗りつぶします。 (マイナス面:。これは、このビュー内の任意の背景を取り除くが、このビューの背後にあるビューを保持します「空想何もしていない」文の

謝罪 - 私は積極的に透明に背景を設定するとカウントされていることに気づいていませんでしたファンシー!

+0

こんにちは@Neil私は同じ問題を抱えています。その他の回避策の解決策? – bman

+0

@bmanは私が与える3つのアイデアを試しましたか?何が起こるのですか? –

+0

非常に便利です..私は私の問題を解決することができます – rags

関連する問題