仿微信图片操作界面

只是仿一个操作界面,没有实质功能,纯属练手做着玩,记录下。


分析

首先,分析下微信打开一张图片以后的操作:

长按图片可以调出一个操作菜单,如果图中有二维码,会增加一个识别二维码选项。

所以,要实现的功能主要是:

  1. 图片长按功能
  2. 操作菜单
  3. 操作菜单动态改变


实现

图片长按功能代码如下:

		ImageView img = (ImageView)findViewById(R.id.img_test);
//		img.setLongClickable(true);
		img.setOnLongClickListener(new OnLongClickListener() {
			
			@Override
			public boolean onLongClick(View v) {
				ImageOpDialog dialog = new ImageOpDialog(mContext);
				// 点击外围可取消
				dialog.setCancelable(true);
				dialog.setCanceledOnTouchOutside(true);
				dialog.show();

				return true;	// 返回true  表示已经处理
			}
		});


操作菜单的代码如下:

public class ImageOpDialog extends Dialog {

	private ArrayAdapter<String> mArrayAdapter = null;
	private Context mContext = null;
	
	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			
			switch (msg.what) {
			case 0:
				mArrayAdapter.add("3");
				mArrayAdapter.insert("0.1", 1);
				mArrayAdapter.notifyDataSetChanged();
				break;
			case 1:
				Toast.makeText(mContext, "点击了第"+(String)msg.obj+"个", Toast.LENGTH_SHORT).show();
				break;

			default:
				break;
			}
		};
	};
	
	public ImageOpDialog(Context context) {
		super(context);
		mContext = context;
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// 去标题
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		setContentView(R.layout.dialog_op);
		
		// 直接用数组会导致add和insert出错
		// 要动态增长,需要使用list
//		mArrayAdapter = new ArrayAdapter<String>(mContext, 
//			android.R.layout.simple_list_item_1, new String[] { 
//				"0", "1"
//		});
		mArrayAdapter = new ArrayAdapter<String>(mContext, 
				android.R.layout.simple_list_item_1, new ArrayList<String>());
		mArrayAdapter.add("0");
		mArrayAdapter.add("1");
		ListView listView = (ListView)findViewById(R.id.list_test);
		listView.setAdapter(mArrayAdapter);
		// 设置按钮点击后的操作
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, 
					long id) {
				Message msg = new Message();
				msg.what = 1;
				msg.obj = "" + position;
				mHandler.sendMessage(msg);
			}
		});
		
		// 动态修改
		mHandler.sendEmptyMessageDelayed(0, 5000);
	}

}


界面效果





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值