2010-12-12 12 views
5

これは私の問題です...:drawable == drawable?

私の活動では、私はImageViewButtonです。 ImageViewが特定のドロウアブルを表示している場合にのみ、ボタンがアクションを実行するようにします。そして、はい、これは、ImageViewが、私がやりたいことで中断しないようにコード化された様々なドロワブルの間でアニメーション化されていることを意味します。

ImageView imgview = (ImageView)findViewById(R.id.imgviewsid); 
Resources res = getResources(); 
Drawable acertaindrawable = res.getDrawable(R.drawable.thecertaindrawable); 
Drawable variabledrawable = imgview.getDrawable(); 

    if (variabledrawable == acertaindrawable) 
    { 
      //does something 
    } 

これは機能しませんでした。そして、私はそれを "if(variabledrawable == acertaindrawable)"という行の誤りに絞り込んだ。 Eclipseは、2つの描画可能ファイルが同じであればAndroidが認識できないエラーを大胆に報告していませんが、コードの他の領域をテストしたところ、すべて正常に動作しています。

答えて

3

Itsikで説明したように、両方の変数が同じ「を見て」オブジェクトへの参照が含まれている場合でも、彼らは2つの異なるオブジェクトのインスタンスです。

==演算子は参照を比較します。両方の変数が同じオブジェクトインスタンスを参照している場合にのみtrueを返します。同じメモリ空間。

DrawableもBitmapDrawableも、2つのインスタンスに同じデータが含まれていることを確認するために適合させた特定の.equals()メソッドを実装していないため、Mathias Linのヒントは.equals()が動作しません。

あなたは何ができるか、Drawableのを拡張することなく、Itsikのアドバイスを、以下、View.setTag()とView.getTag()メソッドを使用しています。これらのメソッドを使用すると、選択した任意のオブジェクトをViewにアタッチし、後で取得できます。コンテンツを変更するたびに簡単な識別子(ビットマップのソースを定義する技術的な整数識別子またはURL)をImageViewに添付することで、簡単にそれを認識することができます。

+0

私は、タグの使用は間違いなく私が達成したいものに役立っている必要ジャスト方向のように働きました。ありがとう! – sneak14

2

if (acertaindrawable.equals(variabledrawable)) ...

2

variabledrawableとacertaindrawableは、彼らが同じ描画可能に表示することがありますにもかかわらず、同じオブジェクトではありませんしてみてください。

もしあなたがdrawableを比較するための組み込みの方法を提供していないなら(あなたが持っている具体的なdrawableに依存していると思いますが)、私のアドバイスはあなたが使用しているDrawableクラスを拡張し、あなたがdrawableの間で比較できるように、ある種のIDを保持するフィールド。

1

あなたも試すことができます。

のgetId()とSETID():タグはすでに何か他のもののために使用されている場合=)

は比較ですためにも使用することができます:)

Psの。:あなたはRelativeLayoutsを使用している場合はを見て...:= P

8

私はこれを投稿するのがかなり遅いと知っていますが、誰でもグーグルに役立つでしょう。

私は使用しました。 getConstantState()は私の2つのドローアブルを比較すると、それが魅力:)