zoukankan      html  css  js  c++  java
  • 如何获取imageView中当前内容的相关信息并比较?

     1 public class MainActivity extends Activity implements OnClickListener{
     2 
     3     private Button button;
     4     private EditText editText;
     5     private ImageView imageView;
     6     @Override
     7     protected void onCreate(Bundle savedInstanceState) {
     8         super.onCreate(savedInstanceState);
     9         setContentView(R.layout.activity_main);
    10         button = (Button) findViewById(R.id.button);
    11         button.setOnClickListener(this);
    12         editText = (EditText) findViewById(R.id.edit_text);
    13         imageView = (ImageView) findViewById(R.id.image_view);
    14     }
    15         
    16     @Override
    17     public void onClick(View v){
    18         switch(v.getId()){
    19         case R.id.button:
    20             Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
    21             if (/*How to decide the image?*/)
    22                 imageView.setImageResource(R.drawable.wa2);
    23             else imageView.setImageResource(R.drawable.ic_launcher);break;
    24         }
    25     }
    View Code

    目的:点击一下按钮,从一张图片切换到另一张

    问题:如何知道此时imageView中是哪一张图片?

    尝试:

    1.

     if (imageView.getId()==R.drawable.ic_launcher) ...

    无法切换

    2.(idea from http://ask.csdn.net/questions/2010

    if (((ImageView)v).getId() == R.drawable.ic_launcher)

    程序炸掉了……

    3.(idea from http://www.eoeandroid.com/thread-66050-1-1.html?_dsign=afedfe3c 3#)

    if (imageView.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.ic_launcher).getConstantState()))

    可用

    原理:Drawable.ConstantState抽象类保存的是不同Drawable对象共享资源的信息,即图片信息而非不同的对象信息

    4.(idea from http://stackoverflow.com/questions/4526585/get-the-id-of-a-drawable-in-imageview

    if (((Integer)((ImageView)v).getTag()).equals(R.drawable.ic_launcher))

    又炸了……

    查看Log:android.widget.Button cannot be cast to android.widget.ImageView

    仔细读一下,发现原文是点击ImageView而非按钮……

    修改代码如下

     1     @Override
     2     public void onClick(View v){
     3         switch(v.getId()){
     4         case R.id.image_view:
     5             Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
     6             ImageView iv = (ImageView) v;
     7             Integer integer = iv.getId();
     8             integer = integer==null?0:integer;
     9             if (integer == R.drawable.wa2||integer == 0){
    10                 imageView.setImageResource(R.drawable.wa2);
    11                 imageView.setTag(R.drawable.wa2);
    12             }
    13             else {
    14                 imageView.setImageResource(R.drawable.ic_launcher);
    15                 imageView.setTag(R.drawable.ic_launcher);
    16             }break;
    17         }
    18     }
    wrong code

    点击图片不再炸,但图片不变;交换if内容后变一次不再变

    log出图片信息和ImageView信息如图,发现都不一样……

    然而发现接口就是这么定义的……一样就有鬼了

    再仔细读一遍,其实代码核心就是getTag()和setTag()……前面全搞错了

    最终修改代码如下:

            imageView.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
                        Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
                        ImageView iv = (ImageView) v;
                        Integer integer = (Integer)iv.getTag();
                        integer = integer==null?0:integer;
                        Log.d("intval",integer.toString());
                        Log.d("wa2val",((Integer)R.drawable.wa2).toString());
                        Log.d("icval",((Integer)R.drawable.ic_launcher).toString());
                        if (integer == R.drawable.wa2){
                            iv.setImageResource(R.drawable.ic_launcher);
                            iv.setTag(R.drawable.ic_launcher);
                        }
                        else {
                            iv.setImageResource(R.drawable.wa2);
                            iv.setTag(R.drawable.wa2);
                        }
                    }
            });
        }

    点击按钮和图片均正常工作

    总结:两种思路,都是获取不变量  1)获取图片本身的不变量:利用drawable.constantState  2)手动设置不变量:为imageView设置tag

  • 相关阅读:
    [常用的SQL语句总结]
    [HTML辅助方法Html.Raw()的简单应用]
    [抹零操作的三种方法]
    如何禁用ViewState,EnableViewState属性设置
    vs2008自定义代码段
    C#.net模拟提交表单GET、POST
    .net 判断对象属性,model对象属性是否赋值,PropertyInfo
    PHP的microtime()? 不!这是 asp.net版的microtime()
    很不错的验证码显示页
    GridView加入自动求和求平均值小计
  • 原文地址:https://www.cnblogs.com/giddens/p/5173692.html
Copyright © 2011-2022 走看看