android - 按下 imageView 时更改 imageView 中的资源的问题

标签 android imageview onclicklistener ontouchlistener

我正在尝试编写一个应用程序来在按下 imageView 时更改图像资源。

我提到了 this link .

我在代码中同时使用了 setOnTouchListenersetOnClickListener。在两者中,我都会得到日志。但是,图像没有改变。我在下面给出了我的代码:

ImageView more;
 more = (ImageView) row.findViewById(R.id.imageView1);
        more.setImageResource(R.drawable.ic_more_1);

setOnTouchListener 是:

more.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                Log.d(TAG,"Event type "+event+" "+ event.getAction());
                switch (event.getAction()) {

                case MotionEvent.ACTION_DOWN:
                    more.setImageResource(R.drawable.ic_more_2);
                    break;
                case MotionEvent.ACTION_UP:
                    more.setImageResource(R.drawable.ic_more_1);
                    break;
                }
                return false;
            }
        });

我的 setOnClickListener 是:

 more.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (!buttonClicked) {
                    Log.d(TAG, "on image click..... false" + buttonClicked);
                    buttonClicked = true;
                    more.setImageResource(R.drawable.ic_more_2);
                }
                if (buttonClicked) {
                    Log.d(TAG, "on image click..... true" + buttonClicked);
                    buttonClicked = false;
                    more.setImageResource(R.drawable.ic_more_1);
                }
                // more.setImageResource(R.drawable.ic_more_2);
                // TODO Auto-generated method stub

                 /* Log.d(TAG, "on image click..... " + pos);
                 * if(listData.getPosition() == SUBSCRIBE) {
                 * more.setImageResource(R.drawable.ic_more_2);
                 * //more.setImageResource(R.drawable.ic_more_1); Log.d(TAG,
                 * "For Subscribe..................."); intent = new
                 * Intent(getContext(), EpisodeActivity.class);
                 * intent.putExtra("URL", strurl);
                 * getContext().startActivity(intent);
                 * 
                 * } else { // TODO REWRITE IT FOR ADDING AS A FAVIOURITE ITEMS
                 * Log.d(TAG, "For Episode..................."); }
                 */

            }
        });

请指出我做错了什么。

提前致谢!!!

注意:因为我想在 listView 中对 ListItem images 进行此更改,所以我在 Custom Adapter< 中使用此代码

更新:

我的适配器:

public class CustomAdapterForSubcribe extends ArrayAdapter<ListData> {

    public final String TAG = "CustomAdapterForSubcribe";
    Context context;
    int layoutResourceId;
    boolean buttonClicked = false;
    LayoutInflater inflater;
    TextView title, desc;
    ImageView more, fav, imageRightSubscribe, imageRightEpisode;
    Intent intent;
    public static int SUBSCRIBE = 1;
    public static int EPISODE = 0;
    private String strurl = "http://timesofindia.feedsportal.com/c/33039/f/533916/index.rss";
    private String imageUrlEpisode = "http://news.bbcimg.co.uk/media/images/66996000/jpg/_66996549_66996528.jpg";

    public CustomAdapterForSubcribe(Context context, int layoutResourceId,
            List<ListData> objects, int option) {
        // TODO Auto-generated constructor stub
        super(context, layoutResourceId, objects);
        this.context = context;
        this.layoutResourceId = layoutResourceId;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final int pos = position;
        View row = convertView;
        if (row == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            row = inflater.inflate(R.layout.episode_row_view, parent, false);
        }
        final ListData listData = getItem(position);

        title = (TextView) row.findViewById(R.id.title);
        desc = (TextView) row.findViewById(R.id.description);
        more = (ImageView) row.findViewById(R.id.imageView1);
        if (listData.getPosition() == SUBSCRIBE) {
            more.setImageResource(R.drawable.ic_more_1);
        } else {
            more.setImageResource(R.drawable.ic_favourite_1);
        }
        // more.setImageResource(R.drawable.ic_more_1);
        imageRightEpisode = (ImageView) row.findViewById(R.id.image);
        imageRightEpisode.setTag(imageUrlEpisode);
        new DownloadImagesTask().execute(imageRightEpisode);
        more.setTag(new Integer(position));

        if (listData.getPosition() == SUBSCRIBE) {
            Log.d(TAG, "<<<<.....In option.....>>>>");
            desc.setVisibility(View.GONE);
            // title.setGravity(Gravity.CENTER_HORIZONTAL);
            // title.setGravity(Gravity.CENTER_VERTICAL);
            title.setGravity(Gravity.CENTER);
            title.setTextSize(16);
            title.setTypeface(Typeface.DEFAULT_BOLD);

        }
        title.setText(listData.getTitle());
        desc.setText(listData.getDesc());
//      more.setOnTouchListener(new View.OnTouchListener() {
//
//          @Override
//          public boolean onTouch(View v, MotionEvent event) {
//              // TODO Auto-generated method stub
//              Log.d(TAG, "Event type " + event + " " + event.getAction());
//              if (listData.getPosition() == SUBSCRIBE) {
//                  switch (event.getAction()) {
//
//                  case MotionEvent.ACTION_DOWN:
//                      Log.d(TAG, "SUBSCRIBE...Image press releasing....");
//                      more.setImageResource(R.drawable.ic_more_1);
//                      more.invalidate();
//                      break;
//                  case MotionEvent.ACTION_UP:
//                      Log.d(TAG, "SUBSCRIBE... Image pressing....");
//                      more.setImageResource(R.drawable.ic_more_2);
//                      break;
//                  }
//              }
//
//              return false;
//          }
//      });
        more.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (listData.getPosition() == EPISODE) {
                    if (!buttonClicked) {
                        Log.d(TAG, "on image click..... false" + pos);

                        more.setImageResource(R.drawable.ic_favourite_2);
                        buttonClicked = true;
                    }
                    else if (buttonClicked) {
                        Log.d(TAG, "on image click..... " + buttonClicked);

                        more.setImageResource(R.drawable.ic_favourite_1);
                        buttonClicked = false;
                    }
                }

                // more.setImageResource(R.drawable.ic_more_2);
                // TODO Auto-generated method stub
                else if (listData.getPosition() == SUBSCRIBE) {

                    Log.d(TAG, "on image click..... " + pos);
                    Log.d(TAG, "For Subscribe...................");
                    intent = new Intent(getContext(), EpisodeActivity.class);
                    intent.putExtra("URL", strurl);
                    getContext().startActivity(intent);

                } else {
                    // TODO REWRITE IT FOR ADDING AS A FAVIOURITE ITEMS
                    Log.d(TAG, "For Episode...................");
                }

            }
        });

        return row;
    }

即使我对代码进行了一些更改,TouchClickListener 也无法为我的图像工作

最佳答案

我使用了 Holder 并更改了 if 条件而不是 Switch case

我的工作代码是:

holder.more.setOnTouchListener(new View.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    if (listData.getPosition() == SUBSCRIBE) {

                        if(event.getAction() == MotionEvent.ACTION_UP){
                            Log.d(TAG,"releasing.....");
                            holder.fav.setImageResource(R.drawable.ic_more_1);
                        }
                        if(event.getAction() == MotionEvent.ACTION_DOWN){
                            Log.d(TAG,"pressing.....");
                            holder.fav.setImageResource(R.drawable.ic_more_2);
                        }
                    }

                    return false;
                }
            });

关于android - 按下 imageView 时更改 imageView 中的资源的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210971/

相关文章:

android - 在 Android API < 21 中使用 setImageTintMode

android - 在 Android 的 EditText 中点击 drawableleft 的监听器?

android - 线性布局无法转换为 RecyclerView onClickItemListener

android - 当 setBuiltInZoomControls 在 android 的 webview 中为真时,ontouch 不起作用

java - 如何获取 Firestore 集合中所有文档的名称(字段)?

java - RecyclerView 不显示任何内容

java - Listview 按钮点击监听器不工作

android - 如何获取 Intent 过滤器 MimeType

android - 为大图像设置更高的 Drawable 分辨率

android - 在运行时显示图像和文本,android?