java代码

Activity:

// 调用dialog,参数:1:自身的activity,2:Bitmap bm读取好的图片
MyDialog dialog = new MyDialog(MyActivity.this, bm);
dialog.show();

Dialog类:

package wdw.action.demo;

import wdw.action.R;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView; public class MyDialog extends Dialog{ private GestureDetector mGestureDetector;
private Bitmap bm, bmTemp; private static final float SMALL_SCALE = 0.8f;
private static final float BIG_SCALE = 1.25f;
private int startX = , startY = ;
private int imageWidth, imageHeight;
private float scaleWidth = , scaleHeight = ;
private int displayWidth, displayHeight;
private ImageView imageView;
private Button imageSmall, imageBig, imageClose; public MyDialog(Context context, Bitmap bm) {
super(context,R.style.dialog);
this.bm = bm;
this.bmTemp = bm;
this.mGestureDetector = new GestureDetector(context, new ViewGestureListener());
} protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.img);
imageView = (ImageView) findViewById(R.id.myImageView);
imageSmall = (Button) findViewById(R.id.image_small);
imageBig = (Button) findViewById(R.id.image_big);
imageClose = (Button) findViewById(R.id.image_close); init();
writeImage();
bindListener();
}
private void init() {
DisplayMetrics dm = new DisplayMetrics();
getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm);
displayWidth = dm.widthPixels;
displayHeight = dm.heightPixels;
imageWidth = bm.getWidth();
imageHeight = bm.getHeight();
}
private void writeImage() {
int w = (w = bmTemp.getWidth()) > displayWidth ? displayWidth : w;
int h = (h = bmTemp.getHeight()) > displayHeight ? displayHeight : h;
if (startX + w <= bmTemp.getWidth() && startY + h <= bmTemp.getHeight()) {
Bitmap bmOrg = Bitmap.createBitmap(bmTemp, startX, startY, w, h);
imageView.setImageDrawable(new BitmapDrawable(bmOrg));
}
}
private void buttonShow() {
imageSmall.setVisibility(View.VISIBLE);
imageBig.setVisibility(View.VISIBLE);
imageClose.setVisibility(View.VISIBLE);
}
private void bindListener() {
Button.OnClickListener imageButtonListener = new Button.OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.image_small:
resize(SMALL_SCALE);
break;
case R.id.image_big:
resize(BIG_SCALE);
break;
case R.id.image_close:
MyDialog.this.dismiss();
break;
default:
break;
}
}
};
imageSmall.setOnClickListener(imageButtonListener);
imageBig.setOnClickListener(imageButtonListener);
imageClose.setOnClickListener(imageButtonListener);
}
public boolean onTouchEvent(MotionEvent event) {
buttonShow();
return mGestureDetector.onTouchEvent(event);
} private void resize(float scale) {
Matrix matrix = new Matrix();
scaleWidth = scaleWidth * scale;
scaleHeight = scaleHeight * scale;
matrix.postScale(scaleWidth, scaleHeight); bmTemp = Bitmap.createBitmap(bm, , , imageWidth, imageHeight, matrix, true);
writeImage(); // 小于图片实际大小就不让缩小
if (scaleWidth * scale * imageWidth < imageWidth || scaleHeight * scale * imageHeight < imageHeight) {
imageSmall.setEnabled(false);
imageSmall.setTextColor(Color.GRAY);
} else {
imageSmall.setEnabled(true);
imageSmall.setTextColor(Color.MAGENTA);
}
// 超过屏幕大小的5倍就不让放大
if (scaleWidth * scale * imageWidth > displayWidth * || scaleHeight * scale * imageHeight > displayHeight * ) {
imageBig.setEnabled(false);
imageBig.setTextColor(Color.GRAY);
} else {
imageBig.setEnabled(true);
imageBig.setTextColor(Color.MAGENTA);
} } class ViewGestureListener implements OnGestureListener{
public boolean onDown(MotionEvent e) {
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
public void onLongPress(MotionEvent e) {
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
startX = (startX + distanceX + displayWidth) > bmTemp.getWidth() ? startX : (int) (startX + distanceX);
startY = (startY + distanceY + displayHeight) > bmTemp.getHeight() ? startY : (int) (startY + distanceY);
startX = startX <= ? : startX;
startY = startY <= ? : startY;
writeImage();
return false;
}
public void onShowPress(MotionEvent e) {
}
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
} }

xml文件

/res/values/dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
</resources>

/res/layout/img.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame_layout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/layoutImage"
>
<ImageView
android:id="@+id/myImageView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
  </LinearLayout>
</LinearLayout>
  <RelativeLayout
    android:id="@+id/relative_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/image_small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:gravity="left"
android:enabled="false"
android:visibility="gone"
android:text="-"
/>
<Button
android:id="@+id/image_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:visibility="gone"
android:text="X"
/>
<Button
android:id="@+id/image_big"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="right"
android:visibility="gone"
android:text="+"
/>
</RelativeLayout>
</FrameLayout>

Android 弹出框Dialog并缩放图片的更多相关文章

  1. android 弹出框(输入框和选择框)

    1.输入框: final EditText inputServer = new EditText(this); inputServer.setFilters(new InputFilter[]{new ...

  2. Android 弹出框

    1.Java package com.fish.helloworld; import android.app.Activity; import android.app.AlertDialog; imp ...

  3. Android 弹出对话框Dialog充满屏幕宽度

    final View view = LayoutInflater.from(context).inflate(layoutId, null); final Dialog dialog = new Di ...

  4. bootstrop 日期控件 datepicker被弹出框dialog覆盖的解决办法

    筒子们在使用bootstrap的日期控件(datepicker , 现在官网提供的名称叫 datetimepicker)时可能会遇到如上图的问题这是啥原因造成的呢? 答案很简单时输出的优先级造成的(z ...

  5. 点击datagrid弹出ldhdialog,点击弹出框的按钮,关闭且刷新datagrid

    datagrid里的js这么写 //点击添加按钮触发 function superadd(title,addurl,gname,width,height) { gridname=gname; crea ...

  6. elementUI vue 页面加载的时候页面出现了黑字 页面优化处理 按钮弹出框文字

    elementUI 页面如果需要加载很多东西的时候, 自己定义的按钮或者弹出框dialog的文字就会显示在页面上, 一闪而过, 因此需要优化一下, elementUI 提供的loading有遮罩层, ...

  7. CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题

    项目开发过程中,发现CKEDITOR 插件的弹出框 内 如果跟据项目需要写表格(table tr td),表格的边框等属性会被 CKEDITOR的清除或覆盖,导致表格很难看. 问题关键: 插件弹出框d ...

  8. Android 如何利用Activity的Dialog风格完成弹出框设计

    在我们使用Dialog时,如果需要用到很多自己设计的控件,虽然可以让弹出框显示出我们需要的界面,但却无法找到地方完成控制代码的编写,如何解决这个问题呢,我们可以将Activity伪装成Dialog弹出 ...

  9. android自定义弹出框样式实现

    前言: 做项目时,感觉Android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个. 废话不说先上图片: 实现机制 1.先自定义一个弹出框的样式 2.自己实现CustomD ...

随机推荐

  1. Django中的Session--实现登录

    Django中的Session--实现登录 Django Session  Session Session 是什么 Session保存在服务端的键值对. 为什么要有 Session Cookie 虽然 ...

  2. python 报错: Dog() takes no arguments

    后来上网找了一下.发现是 构造方法 __init__ 两边的下划线是双下划线,我写的是单下划线. 读书不认真,该打. 特此记录.

  3. js img转换base64

    方法一:canvas <script type="text/javascript"> function getBase64Image(img) { var canvas ...

  4. System Verilog基础(二)

    这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...

  5. docker with devicemapper storage driver

    storage driver的选择依据很多的条件,比如发行版版本,团队技术积累,稳定性等. device mapper是redhat/centos中最适合的, 稳定性也可以,内核原生支持,基于块设备, ...

  6. Mac下锁屏快捷键

    ▲先设置“进入眨眼或开始屏幕保护程序”选择”立即“要求输入密码. [系统编好设置]->[通用] ▲通过快捷键[shift+control+光驱键]或者[option+command+关机键]

  7. 第一个hibernate程序HelloWorldHibernate

    HelloWorldHibernate步骤: HelloWorld 1,新建java项目hibernate_0100_HelloWorld 2,学习User-library-hibernate,并加入 ...

  8. np.random.random()函数 参数用法以及numpy.random系列函数大全

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.r ...

  9. django+mysql+html简单demo之 views+html

    #coding=utf-8 from __future__ import unicode_literals from django.shortcuts import render,render_to_ ...

  10. linux mint 18.2 安装wireshark

    Method 1: Via PPA Step 1: Add the official PPA sudo add-apt-repository ppa:wireshark-dev/stable Step ...