Android 自定义显示图片Dialog

    xiaoxiao2022-07-02  98

    效果图:

    布局文件 <?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="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:adjustViewBounds="true" android:scaleType="fitCenter" 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 ShowImageDialog extends Dialog { private ImageView imageView; private Object showImage; private boolean canCancle; public ShowImageDialog(Context context, Object showImage) { this(context, showImage, true); } public ShowImageDialog(Context context, Object showImage, boolean canCancle) { super(context, R.style.ShowImageDialog); this.showImage = showImage; this.canCancle = canCancle; } public void setShowImage(Object showImage) { this.showImage = showImage; handler.sendEmptyMessage(0); } @SuppressLint("HandlerLeak") private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { MyCommon.setViewContent(imageView, showImage); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_showimage); imageView = findViewById(R.id.imageView); handler.sendEmptyMessage(0); // 设置点击屏幕或物理返回键,dialog是否消失 setCanceledOnTouchOutside(canCancle); //设置点击返回键,dialog是否消失 setCancelable(canCancle); Window w = getWindow(); WindowManager.LayoutParams lp = null; if (w != null) { lp = w.getAttributes(); lp.x = 0; lp.y = 40; w.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } 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 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(); 即可。

    最新回复(0)