簡體   English   中英

如果ImageView可繪制對象等於已知可繪制對象

[英]If ImageView drawable equals a known drawable

我有一個imageview,它的imageresource是通過編程設置的。 該圖像的資源可能由3個可繪制對象中的任何一個設置,可使用該類前面的各種變量進行選擇。 3個可繪制對象是:

R.drawable.well_done
R.drawable.try_again
R.drawable.sorry_failed

當我單擊該圖像時,它可能設置了這三個可繪制對象中的任何一個,因此我試圖按照這種方式運行某種方法(我知道這是完全錯誤的,但它可能有助於可視化我所我試圖做)

public void game(){
    //STUFF
    if(result>10){
    imgView.setImageResource(R.drawable.well_done);}
    //MORE STUFF
}

public void results_page(){
    if(imgView=R.drawable.well_done){
        //DO STUFF
    }
    if(imgView=R.drawable.try_again){
        //DO STUFF
    }
    //etc...
}

這是我的正確代碼。 它比上面我的垃圾可視化要復雜一些,但是我希望您理解我正在嘗試做的事情。

    ImageView iv_i;
//...
...onCreate(Bundle savedInstanceState){
    //...
    result1.setOnClickListener(onClL);
    result2.setOnClickListener(onClL);
}

private void game() {
    //...
    result1.setImageResource(R.drawable.well_done);
    result1.setTag(R.drawale.well_done)
    result2.setImageResource(R.drawable.try_again);
    result2.setTag(R.drawable.try_again);
    //...
}

private OnClickListener onClL = new OnClickListener() {
    @Override
    public void onClick(View v) {

        switch(v.getId()){
            case R.id.result1:
            ic_i = result1;
            iv_i.setTag(result1.getTag());

            break;
            case R.id.result2:
            iv_i = result2;
            ic_i.setTag(result2.getTag());
            break;

        }

        gotoResource();
    }
};


private void gotoResource(){
    Integer integer = (Integer) iv_i.getTag();
    switch(integer){
        case R.drawable.well_done:
        //STUFF
        break;
        case R.drawable.try_again:
        //STUFF
        break;
        case R.drawable.sorry:
        //STUFF
        break;
    }
}

當我運行此命令時,在包含iv_i.setTag(result1.getTag());的行上獲得nullpointerexception iv_i.setTag(result1.getTag());

我怎么了? 還是我應該如何正確地做到這一點,或者另一種更容易做到的方式? 也許將drawable轉換為字符串,然后對該字符串執行if語句,例如:(也知道這是完全錯誤的,但只是為了可視化)

String resource = imgView.getDrawable().toString();
if(resource.equals("R.drawable.well_done")){
//DO SOMETHING
}

謝謝

建議不要在ImageView上依賴確切的可繪制對象,而建議在ImageView上設置一個標簽以指示其處於哪個狀態。我最近在類似的問題(確定按鈕是否處於活動狀態)上使用了這種方法,並且效果很好為了我。

private static enum MessageViewType { SUCCESS, TRY_AGAIN, FAILURE }

public void game(){
    //STUFF
    if (result > 10){
        imgView.setImageResource(R.drawable.well_done);}
        imgView.setTag(R.id.image_view_status, MessageViewType.SUCCESS); // define image_view_status as a resource
    }
    //MORE STUFF
}

...

private void gotoResource(){
    MessageViewType messageType = (MessageViewType) iv_i.getTag(R.id.image_view_status);
    if (messageType == MessageViewType.SUCCESS) {
        //STUFF
    } else if (messageType == MessageViewType.TRY_AGAIN) {
        // STUFF
    } else if (messageType == MessageViewType.FAILURE) {
        //STUFF
    }
}

您可以在任何資源文件中定義image_view_status id。 我個人使用文件res > values > activity_resources.xml ,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="image_view_status" type="id" />
</resources>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM