android 动态实现点击ImageButton更换图片

该篇博客介绍了一个Android应用中如何实现在点击ImageButton时动态更换图片。通过定义未选中和选中状态的图标资源,结合OnClickListener和OnLongClickListener监听事件,实现点击和长按触发不同图片切换效果。同时,根据用户选择启动不同的Activity,如通讯录、电池管理、硬件加速等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.tiantian.activitys;

import com.example.tiantian.R;
import com.example.tiantian.alarm.ClockActivity;
import com.example.tiantian.battery.BatteryActivty;
import com.example.tiantian.phonespeed.DriverActivity;
import com.example.tiantian.softmanagement.SoftManagementActivity;
import com.example.tiantian.takepickures.PhotoGraphActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.ImageView;
import android.widget.TextView;

public class MenuActivity extends BaseActivity implements OnClickListener,
  OnLongClickListener {
 // 定义未选中图标
 int[] draw0 = { R.drawable.menu_icon_0_0, R.drawable.menu_icon_1_0,
   R.drawable.menu_icon_2_0, R.drawable.menu_icon_3_0,
   R.drawable.menu_icon_4_0, R.drawable.menu_icon_5_0 };
 // 定义选中图标
 int[] draw1 = { R.drawable.menu_icon_0_1, R.drawable.menu_icon_1_1,
   R.drawable.menu_icon_2_1, R.drawable.menu_icon_3_1,
   R.drawable.menu_icon_4_1, R.drawable.menu_icon_5_1 };

 String[] string = { "通讯录", "软件管家", "硬件加速", "电池管理", "闹钟", "照相机" };

 TextView text;// 文本提示
 ImageView teleLine;// 通讯录
 ImageView batterLine;// 电池管理
 ImageView cameraLine;// 照相机
 ImageView softLine;// 软件管理
 ImageView hardLine;// 硬件加速
 ImageView clockLine;// 闹钟
 ImageView temp;//
 int s;
 ImageView Zview;
 int Wid;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.mainmenu);
  teleLine = (ImageView) findViewById(R.id.imageView_main0);
  softLine = (ImageView) findViewById(R.id.imageView_main1);
  hardLine = (ImageView) findViewById(R.id.imageView_main2);
  batterLine = (ImageView) findViewById(R.id.imageView_main3);
  clockLine = (ImageView) findViewById(R.id.imageView_main4);
  cameraLine = (ImageView) findViewById(R.id.imageView_main5);
  text = (TextView) findViewById(R.id.tvdisplay);
  // 设点击监听
  teleLine.setOnClickListener(this);
  softLine.setOnClickListener(this);
  hardLine.setOnClickListener(this);
  batterLine.setOnClickListener(this);
  clockLine.setOnClickListener(this);
  cameraLine.setOnClickListener(this);
  // 设置长按监听
  teleLine.setOnLongClickListener(this);
  softLine.setOnLongClickListener(this);
  hardLine.setOnLongClickListener(this);
  batterLine.setOnLongClickListener(this);
  clockLine.setOnLongClickListener(this);
  cameraLine.setOnLongClickListener(this);

 }

 @Override
 public boolean onLongClick(View v) {
  Intent intent = new Intent();
  switch (v.getId()) {
  case R.id.imageView_main5://相机
   relSel(cameraLine, 5);
   intent.setClass(MenuActivity.this, PhotoGraphActivity.class);
   startActivity(intent);
   return true;

  case R.id.imageView_main0://通讯录
   relSel(teleLine,0);
   return true;

  case R.id.imageView_main1://软件管理
   relSel(softLine,1);
   intent.setClass(MenuActivity.this, SoftManagementActivity.class);
   startActivity(intent);
   return true;

  case R.id.imageView_main2://硬件管理 
   relSel(hardLine,2);
   intent.setClass(MenuActivity.this, DriverActivity.class);
   startActivity(intent);
   return true;

  case R.id.imageView_main3://电池管理
   relSel(batterLine,3);
   intent.setClass(MenuActivity.this, BatteryActivty.class);
   startActivity(intent);
   return true;

  case R.id.imageView_main4://闹钟
   relSel(clockLine,4);
   intent.setClass(MenuActivity.this, ClockActivity.class);
   startActivity(intent);
   return true;

  default:
   break;

  }
  return false;
 }

 /**
  * 当第一次点击图标时,relSel是null,不执行if语句,分别把点击的图标id 和对象分别复给一个临时变量,
  * 并给当前选中的图片设置带边的图片和文本信息;再点击图标时,zview中有值不为空,并且是之前点击图片存的那个值,就把之前点击的
  * 图标切回原始状态图片,id是临时存的那个变量中,执行完后,把当前传过来的图标,和id
  * 再一次复给临时变量,并给当前图标设置对应的带边图标和对应文本内容
  */
 private void relSel(ImageView view2, int i) {
  if (Zview != null) {
   Zview.setImageResource(draw0[Wid]);
  }

  Wid = i;
  Zview = view2;
  Zview.setImageResource(draw1[Wid]);
  text.setText(string[Wid]);

 }

 // 对每一个组件进行监听,实现换图片和显示文本名子
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.imageView_main0:
   set(0, teleLine);
   break;
  case R.id.imageView_main1:
   set(1, softLine);
   break;
  case R.id.imageView_main2:
   set(2, hardLine);
   break;
  case R.id.imageView_main3:
   set(3, batterLine);
   break;
  case R.id.imageView_main4:
   set(4, clockLine);
   break;
  case R.id.imageView_main5:
   set(5, cameraLine);
   break;
  default:
   break;

  }
 }

 // 实现换图片和显示文本的效果
 public void set(int i, ImageView image) {

  if (temp != null) {
   temp.setImageResource(draw0[s]);// 第一次执行的时候,temp为空,当第二次执行,temp值为前一个图片的值,这句是为前一个图片设置没边的图片,还原回去。
  }
  s = i;// 如果第一次时temp值为空,不执行上面的语句,把数组下标i,赋值给临时变量s.
  temp = image;// 把第一次点的图片先放在临时变量中,方便下一次点击时,给之前的图片恢复原值。
  temp.setImageResource(draw1[s]);// 显示选中的那张图片,对应的图片为选中图片
  text.setText(string[s]);
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值