android 开发 UI图片点击弹出,弹出的图片支持手势放大缩小 弹出 图片 可以使用 自定义 Dialog 实现 参考博客 : http://www.cnblogs.com/and_he/archive/2011/09/16/2178716.html多点触摸缩放图片 : http://www.2cto.com/kf/201311/260721.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DiaologDemoActivity.java的类,加载图片和重新画图public class DiaologDemoActivity extends Activity{ private Gallery mGallery; private LinearLayout ll_viewArea; private LinearLayout.LayoutParams parm; private ViewArea viewArea;//获取图片 private Integer[] mImage = { R.drawable.guide_page01, R.drawable.guide_page02, R.drawable.guide_page03, R.drawable.guide_page04 }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 去除title requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); mGallery = (Gallery) findViewById(R.id.gallery); mGallery.setAdapter(new ImageAdapter(this)); mGallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Bitmap imageBitmap = drawableToBitmap(getResources().getDrawable( mImage[position])); showImg(imageBitmap); } }); } private void showImg(Bitmap res) { // 初始化一个自定义的Dialog final CustomDialog.Builder b = new CustomDialog.Builder(this); LayoutInflater inflater = LayoutInflater.from(DiaologDemoActivity.this); final View view = inflater.inflate(R.layout.progress_dialog, null); ImageView closeBtn = (ImageView) view.findViewById(R.id.close_btn); ll_viewArea = (LinearLayout) view.findViewById(R.id.ll_viewArea); parm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); parm.gravity = Gravity.CENTER; // 自定义布局控件,用来初始化并存放自定义imageView viewArea = new ViewArea(DiaologDemoActivity.this, res); ll_viewArea.addView(viewArea, parm); b.setView(view); b.show(); closeBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { b.dismiss(); } }); } private class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; } @Override public int getCount() { return mImage.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(mContext); i.setImageResource(mImage[position]); i.setScaleType(ImageView.ScaleType.FIT_XY); i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); return i; } } /** * Drawable对象转化Bitmap对象 * @param drawable Drawable对象 * @return Bitmap对象 */ public Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); // canvas.setBitmap(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; }}弹出对话框类CustomDialog.javapublic class CustomDialog extends Dialog{ private boolean mCanceledOnTouchOutside = true; private boolean mIsMenu; protected CustomDialog(Context context, int theme) { super(context, theme); } protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); } protected CustomDialog(Context context) { this(context, R.style.custom_dialog); } @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); } @Override public void setContentView(View view) { super.setContentView(view); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /** * 捕获系统菜单键响应事件 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU && mIsMenu) { cancel(); } return super.onKeyDown(keyCode, event); } public boolean onTouchEvent(MotionEvent event) { if (mCanceledOnTouchOutside && event.getAction() == MotionEvent.ACTION_DOWN && isOutOfBounds(event)) { cancel(); return true; } return false; } private boolean isOutOfBounds(MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final View contentView = findViewById(R.id.content); return (x < contentView.getLeft()) || (y < contentView.getTop()) || (x > contentView.getRight()) || (y > contentView.getBottom()); } public static class Builder { private CustomDialog mDialog; private LinearLayout mContent; private View customView; public Builder(Context context) { mDialog = new CustomDialog(context); mDialog.setContentView(R.layout.custom_dialog); LayoutParams params = mDialog.getWindow().getAttributes(); params.width = LayoutParams.FILL_PARENT; params.height = LayoutParams.FILL_PARENT; mDialog.getWindow().setAttributes(params); mContent = (LinearLayout) mDialog.findViewById(R.id.content); mDialog.setCanceledOnTouchOutside(true); } public void setOnCancelListener(OnCancelListener listener) { mDialog.setOnCancelListener(listener); } public void setCanceledOnTouchOutside(boolean flag) { mDialog.mCanceledOnTouchOutside = flag; } public void setOnDismissListener(OnDismissListener listener) { mDialog.setOnDismissListener(listener); } public void dismiss() { mDialog.dismiss(); } public void show() { if (customView != null) { mContent.addView(customView); } mDialog.show(); } public void setView(View view) { customView = view; } public void setIsMenu(boolean isMenu) { mDialog.mIsMenu = isMenu; } }} 求android股票行情图实现的demo Android控件拖动问题 音乐播放器问题,求解。 Path应用 上面图片的区域,随手指下拉展示全图,怎么实现呢? 关于activity与home键的问题 SimpleAdapter与button的问题 activity 问题 Android 如何移动本地文件 Android 百度地图开发 怎么获得右上角和左下角的地图坐标 联系人导入微博头像 求android使用JNI调用ffmpeg视频解码 菜鸡求问ListView的长按和短按问题
DiaologDemoActivity.java的类,加载图片和重新画图
public class DiaologDemoActivity extends Activity
{ private Gallery mGallery; private LinearLayout ll_viewArea;
private LinearLayout.LayoutParams parm;
private ViewArea viewArea;
//获取图片
private Integer[] mImage = { R.drawable.guide_page01,
R.drawable.guide_page02, R.drawable.guide_page03,
R.drawable.guide_page04 };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 去除title
requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); mGallery = (Gallery) findViewById(R.id.gallery);
mGallery.setAdapter(new ImageAdapter(this));
mGallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position,
long id)
{
Bitmap imageBitmap = drawableToBitmap(getResources().getDrawable(
mImage[position]));
showImg(imageBitmap);
}
});
}
private void showImg(Bitmap res)
{
// 初始化一个自定义的Dialog
final CustomDialog.Builder b = new CustomDialog.Builder(this);
LayoutInflater inflater = LayoutInflater.from(DiaologDemoActivity.this);
final View view = inflater.inflate(R.layout.progress_dialog, null); ImageView closeBtn = (ImageView) view.findViewById(R.id.close_btn); ll_viewArea = (LinearLayout) view.findViewById(R.id.ll_viewArea);
parm = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
parm.gravity = Gravity.CENTER; // 自定义布局控件,用来初始化并存放自定义imageView
viewArea = new ViewArea(DiaologDemoActivity.this, res); ll_viewArea.addView(viewArea, parm); b.setView(view);
b.show(); closeBtn.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{
b.dismiss();
}
});
} private class ImageAdapter extends BaseAdapter
{ private Context mContext;
public ImageAdapter(Context c)
{
mContext = c;
}
@Override
public int getCount()
{
return mImage.length;
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ImageView i = new ImageView(mContext);
i.setImageResource(mImage[position]);
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return i;
}
}
/**
* Drawable对象转化Bitmap对象
* @param drawable Drawable对象
* @return Bitmap对象
*/
public Bitmap drawableToBitmap(Drawable drawable)
{ Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE
? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
// canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}}
弹出对话框类CustomDialog.javapublic class CustomDialog extends Dialog
{ private boolean mCanceledOnTouchOutside = true;
private boolean mIsMenu;
protected CustomDialog(Context context, int theme)
{
super(context, theme);
}
protected CustomDialog(Context context, boolean cancelable,
OnCancelListener cancelListener)
{
super(context, cancelable, cancelListener);
}
protected CustomDialog(Context context)
{
this(context, R.style.custom_dialog);
}
@Override
public void setContentView(int layoutResID)
{
super.setContentView(layoutResID); }
@Override
public void setContentView(View view)
{
super.setContentView(view);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
/**
* 捕获系统菜单键响应事件
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_MENU && mIsMenu)
{
cancel();
}
return super.onKeyDown(keyCode, event);
}
public boolean onTouchEvent(MotionEvent event)
{
if (mCanceledOnTouchOutside
&& event.getAction() == MotionEvent.ACTION_DOWN
&& isOutOfBounds(event))
{
cancel();
return true;
} return false;
}
private boolean isOutOfBounds(MotionEvent event)
{
final int x = (int) event.getX();
final int y = (int) event.getY();
final View contentView = findViewById(R.id.content);
return (x < contentView.getLeft()) || (y < contentView.getTop())
|| (x > contentView.getRight()) || (y > contentView.getBottom());
} public static class Builder
{ private CustomDialog mDialog;
private LinearLayout mContent;
private View customView;
public Builder(Context context)
{
mDialog = new CustomDialog(context);
mDialog.setContentView(R.layout.custom_dialog);
LayoutParams params = mDialog.getWindow().getAttributes();
params.width = LayoutParams.FILL_PARENT;
params.height = LayoutParams.FILL_PARENT;
mDialog.getWindow().setAttributes(params);
mContent = (LinearLayout) mDialog.findViewById(R.id.content);
mDialog.setCanceledOnTouchOutside(true);
}
public void setOnCancelListener(OnCancelListener listener)
{
mDialog.setOnCancelListener(listener);
}
public void setCanceledOnTouchOutside(boolean flag)
{
mDialog.mCanceledOnTouchOutside = flag;
}
public void setOnDismissListener(OnDismissListener listener)
{
mDialog.setOnDismissListener(listener);
}
public void dismiss()
{
mDialog.dismiss();
}
public void show()
{
if (customView != null)
{
mContent.addView(customView);
}
mDialog.show();
}
public void setView(View view)
{
customView = view;
}
public void setIsMenu(boolean isMenu)
{
mDialog.mIsMenu = isMenu;
} }}