效果图:
Android 自定义显示图片Dialog_第1张图片

  • 布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/imageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        tools:ignore="ContentDescription" /></RelativeLayout>
  • 新建style样式
<style name="ShowImageDialog" parent="@android:style/Theme.Dialog">        <item name="android:windowIsFloating">true</item>        <item name="android:windowIsTranslucent">true</item>        <item name="android:windowNoTitle">true</item>        <item name="android:windowBackground">@android:color/transparent</item>        <item name="android:background">@android:color/transparent</item>        <item name="android:backgroundDimEnabled">true</item>    </style>
  • 新建ShowImageDialog继承Dialog:
import android.annotation.SuppressLint;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.ImageView;public class DzShowImageDialog extends Dialog {    private Object showImage;    public DzShowImageDialog(Context context, Object showImage) {        super(context, R.style.ShowImageDialog);        this.showImage = showImage;    }    @SuppressLint("ResourceType")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.dialog_showimage);        ImageView imageView = findViewById(R.id.imageView);        MyCommon.setViewContent(imageView, showImage);        setCanceledOnTouchOutside(true); // 设置点击屏幕或物理返回键,dialog是否消失        Window w = getWindow();        assert w != null;        WindowManager.LayoutParams lp = w.getAttributes();        lp.x = 0;        lp.y = 40;        onWindowAttributesChanged(lp);        imageView.setOnClickListener(                new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        dismiss();                    }                });    }}
  • 附MyCommon方法
/** * 设置 ImageView 的显示内容。 *  * @param content *            支持 null,Integer(ResID),Bitmap,Drawable。 */public static boolean setViewContent(ImageView view, Object content) {if (view == null)return false;Object tagValue = getTagValue(content);if (view.getTag(R.string.setTagKey_content).equse(tagValue))return view.getDrawable() != null;view.setTag(R.string.setTagKey_content, tagValue);Drawable real = getDrawable(view, content);view.setImageDrawable(real);return (real != null);}/** * 为指定 View 准备其需要使用的 Drawable 对象。 */@SuppressWarnings("deprecation")public static Drawable getDrawable(View view, Object drawable) {if (view == null)return null;if (drawable == null)return null;Drawable real = null;try {if (drawable instanceof DzInteger)drawable = ((DzInteger) drawable).value;if (drawable instanceof Integer) {int resId = (Integer) drawable;if (resId == 0)return null;real = view.getResources().getDrawable(resId);} else if (drawable instanceof Drawable) {real = (Drawable) drawable;} else if (drawable instanceof Bitmap) {real = new BitmapDrawable(view.getResources(), (Bitmap) drawable);}} catch (Throwable e) {Log.e("", "MyCommon.getViewDrawable(.., ..) failed for %s", e.toString());}// 需要设置一下,否则在 TextView 中显示不出来if (real != null) {real.setBounds(0, 0, real.getMinimumWidth(), real.getMinimumHeight());}return real;}
  • 使用示例

使用的话只需要调用 new ShowImageDialog(context , 图片).show(); 即可。

更多相关文章

  1. android图片下载工具类
  2. Android之给图片添加水印效果
  3. Android 图片手势缩放自定义View
  4. android 图片点击一下就放大到全屏,再点一下就回到原界面
  5. Android 显示网页图片
  6. android 图片与byte数组间的转换
  7. android 图片灰度处理的处理
  8. 轮播网络图片加载适配

随机推荐

  1. 【3y】从零单排学Redis【青铜】
  2. Mybatis框架如何使用分页插件呢?
  3. ES11 来了,还学得动吗?
  4. 基于SSH框架实现的驾校管理系统
  5. 移动端跨平台技术之下的变与不变
  6. Fast Refresh 原理剖析
  7. 从0开始搭建数据仓库(2):产品经理如何“玩
  8. 图解 *** 等 6 种前端渲染模式
  9. Hot Reload 究竟是怎么实现的?
  10. low-code?与 20 年前的 Dreamweaver 有什