只是仿一个操作界面,没有实质功能,纯属练手做着玩,记录下。
分析
首先,分析下微信打开一张图片以后的操作:
长按图片可以调出一个操作菜单,如果图中有二维码,会增加一个识别二维码选项。
所以,要实现的功能主要是:
- 图片长按功能
- 操作菜单
- 操作菜单动态改变
实现
图片长按功能代码如下:
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);
}
}
界面效果