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. net 反编译神器

    文章地址:https://www.cnblogs.com/sheng-jie/p/10168411.html dnSpy官网下载  分享链接 .net core源码导航 https://www.cnb ...

  2. USACO The Lazy Cow

    题目描述 这是一个炎热的夏天,奶牛贝茜感觉到相当的疲倦而且她也特别懒惰.她要在她的领域中找到一个合适的位置吃草,让她能吃到尽可能多的美味草并且尽量只在很短的距离.奶牛贝茜居住的领域是一个 N×N 的矩 ...

  3. hiho# 1398 最大权闭合子图 网络流

    题目传送门 题意:给出n个活动,m个人,请人需要花费$a[i]$的钱,举办一次活动可以赚$b[i]$的钱,但是需要固定的几个人在场,一个人只需要请一次后就必定在场,问最大收益. 思路: 下列结论来自h ...

  4. windows 下加载执行hta文件的方法

    首先编写这么一个hta的文件: <html> <head> <script> s = new ActiveXObject("WScript.Shell&q ...

  5. Velocity工作原理解析和优化

    在MVC开发模式下,View离不开模板引擎,在Java语言中模板引擎使用得最多是JSP.Velocity和FreeMarker,在MVC编程开发模式中,必不可少的一个部分是V的部分.V负责前端的页面展 ...

  6. 转:不用安装Oracle客户端,远程连接Oracle数据库

    转摘自: http://blog.sina.com.cn/s/blog_90b20fe70101az2z.html Oracle数据库安装过程较为繁琐,而且卸载更加麻烦,如果卸载不干净,下次安装Ora ...

  7. height百分比失效

    heigh:100%失效 解决方案: 第一种 html, body { height: 100%; } 第二种 div { height: 100%; position: absolute; } 非定 ...

  8. 原生javascript实现分页效果+搜索功能

    一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要. ...

  9. Python(1):入门

    安装: 在linux中一般都自带有python2.7的版本,如果想升级python到最新的版本可以参考其他博客(http://www.cnblogs.com/lanxuezaipiao/archive ...

  10. 题解 P1068 【分数线划定】

    由于涉及到排序和对应序号 那就定义一个结构体 结合STL模板中的sort日常沉迷sort 提示:虽然我也是蒟弱 sort是快速排序函数,有两个或三个参数, 两个参数适用于平常的数字类型,即形sort( ...