Android(安卓)自定义显示图片Dialog
16lz
2022-03-31
效果图:
- 布局文件
<?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(); 即可。
更多相关文章
- Android自动化工具Monkeyrunner使用(六) —— 根据ID查找对象
- Android(安卓)三角标签(自定义Textview控件)
- android 音量获取和设置总结
- android sqlite和listview 使用小例子
- andorid 自定义seekbar
- Android(安卓)使用netty框架实现socket通信
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用