android-Matrix放大缩小图片_没落凄凉的博客-程序员宅基地

技术标签: layout  button  Android开发  android  matrix  float  encoding  

package zhang.matrix;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class maxtrix extends Activity {
	private ImageView mImageView;
	private Button mButton1;
	private Button mButton2;
	private RelativeLayout layout1;
	private Bitmap bmp;
	private int id=0;
	private int displayWidth;
	private int displayHeight;
	private float scaleWidth=1;
	private float scaleHeight=1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //取得屏幕分辨率大小
        DisplayMetrics dm=  new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        displayWidth=dm.widthPixels;
        displayHeight=dm.heightPixels-80;
        bmp=BitmapFactory.decodeResource(getResources(), R.drawable.q2);
        mImageView=(ImageView)findViewById(R.id.imageView1);
        layout1= (RelativeLayout)findViewById(R.id.layout1);
        mButton1= (Button)findViewById(R.id.button1);
        mButton2=(Button)findViewById(R.id.button2);
        
        mButton1.setOnClickListener(new Button.OnClickListener(){

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				small();
			}
        });
        mButton2.setOnClickListener(new Button.OnClickListener(){

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				big();
			}
        });
    }
    public void small(){
    	int bmpWidth=bmp.getWidth();
    	int bmpHeight=bmp.getHeight();
    	double scale =0.8;
    	scaleWidth=(float)(scaleWidth*scale);
    	scaleHeight=(float)(scaleHeight*scale);
    	Matrix matrix = new Matrix();
    	matrix.postScale(scaleWidth, scaleHeight);
    	Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true);
    	if(id==0){//第一次就删除原来的Imageview
    		layout1.removeView(mImageView);
      	}else{//不是第一次删除上一次产生的ImageView
      		
      		layout1.removeView((ImageView)findViewById(id));
       	}
    	id++;
    	ImageView imageView = new ImageView(maxtrix.this);
    	imageView.setId(id);
    	imageView.setImageBitmap(resizeBmp);
    	layout1.addView(imageView);
    	setContentView(layout1);
    	//图片最大的时候。放大按钮disable,缩小的时候设为enable
    	mButton2.setEnabled(true);
    }
    
    public void big(){
    	int bmpWidth=bmp.getWidth();
    	int bmpHeight=bmp.getHeight();
    	double scale =1.25;
    	scaleWidth=(float)(scaleWidth*scale);
    	scaleHeight=(float)(scaleHeight*scale);
    	Matrix matrix = new Matrix();
    	matrix.postScale(scaleWidth, scaleHeight);
    	Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true);
    	if(id==0){//第一次就删除原来的Imageview
    		layout1.removeView(mImageView);
      	}else{//不是第一次删除上一次产生的ImageView
      		layout1.removeView((ImageView)findViewById(id));
       	}
    	id++;
    	ImageView imageView = new ImageView(maxtrix.this);
    	imageView.setId(id);
    	imageView.setImageBitmap(resizeBmp);
    	layout1.addView(imageView);
    	setContentView(layout1);
    	//如果在放大图片就超出屏幕,就把Button disable
  if(scaleWidth*scale*bmpWidth>displayWidth||scaleHeight*scale*bmpHeight>displayHeight)
    	mButton2.setEnabled(false);
    	
    	
    }
}



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/layout1"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<ImageView android:layout_height="wrap_content" android:id="@+id/imageView1" android:layout_width="wrap_content" ></ImageView>
<Button android:layout_alignParentBottom="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Button" android:id="@+id/button1"></Button>
<Button android:layout_toRightOf="@+id/button1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Button" android:id="@+id/button2" android:layout_alignTop="@+id/button1" android:layout_alignBottom="@+id/button1"></Button>
</RelativeLayout>


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangnianxiang/article/details/6661012

智能推荐

linux 多进程函数,多进程之信号量 Linux函数 semget();semctl();semop(); [转]_曹野狐的博客-程序员宅基地

Linux进程通信之信号量信号量(semaphore)是变量,是一种特殊的变量。它紧取正值。对信息号量的操作只有2中:等待(wait)和发送信号(signal).信号量比较难理解。下面我们一个个的看一下各个函数。与信号量处理的函数有:semget();semctl();semop();第一个semget()函数,与共享内存的shmget()函数类似。使用格式:#includeint semget...

复选框怎么点td选中_javascript - 点击table中td 选中td中checkbox问题_cryptogram的土豆的博客-程序员宅基地

问 题ABCDE目的:在点击td任何地方的时候,checkbox都设置成被选中或取消的状态但是在点击td选中或者取消checkbox时,如果点击checkbox操作的时候会和td选中 取消冲突,造成checkbox不能选,js如下:$(".table").on("click", "tr td", function(){var checkbox = $(this).find("input[type...

【备忘】2017年最新云知梦php全栈开发全套视频教程_qq_38472425的博客-程序员宅基地

1.php环境搭建2.php变量使用3.php变量测试和变量转换4.php常用运算符5.php流程控制6.php流程控制与函数7.php函数8.php数组函数第一部分9.php数组函数第二部分10.php数组函数第三部分11.php字符串函数第一部分12.php字符串函数第二部分13.php正则表达式14.数学、日期和错误处理15.php日期函数16.php图片处理第一部分17.php图片处理第二...

TensorFlow实现反向传播算法_qq_41621342的博客-程序员宅基地

反向传播(BPN)算法是神经网络中研究最多、使用最多的算法之一,它用于将输出层中的误差传播到隐藏层的神经元,然后用于更新权重。学习 BPN 算法可以分成以下两个过程:正向传播:输入被馈送到网络,信号从输入层通过隐藏层传播到输出层。在输出层,计算误差和损失函数。反向传播:在反向传播中,首先计算输出层神经元损失函数的梯度,然后计算隐藏层神经元损失函数的梯度。接下来用梯度更新权重。这两个过程重复迭代直到收敛。使用MNIST数据集具体实现过程# 反向传播(BPN)算法# 导入模块import ten

谈「韦诺之战」_a13393665983的博客-程序员宅基地

谈「韦诺之战」 谈「韦诺之战」 | 半卷 谈「韦诺之战」 沈觅仁 狂想集 2011-10-16 玩韦诺之战也有好长时间了。一直十分热爱战棋类游戏,例如英雄无敌,例如火焰纹章,沉迷于培养英雄们,同时和他们一同冒险。玩韦诺之战的直接原因是,它是L...

Placement new、operator new、new operator_Mooooooooooooon的博客-程序员宅基地

http://www.cnblogs.com/younes/archive/2010/04/26/1721528.htmlPlacement new、operator new、new operator 完全释疑首先我们区分下几个容易混淆的关键词:      new(也称作new operator)、operator new、placement new。看如下代码:

随便推点

MyBatis——Generator_weixin_30526593的博客-程序员宅基地

1、依赖:&lt;!--mybatis逆向工程--&gt;&lt;dependency&gt; &lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt; &lt;artifactId&gt;mybatis-generator-core&lt;/artifactId&gt; &lt;version&gt;1.3....

C++学习感想2_teqingrenyuan的博客-程序员宅基地

我在CSDN上得更新很慢,因为我看得书少,学得东西少,还有就是自己很懒啊.说起来很惭愧.自己还是不是搞IT得,学得不好啊,上学期又开了C++这门课,其实我觉得c++还是太复杂了.

深入 Composer autoload_军火商OL的博客-程序员宅基地

转自:https://learnku.com/composer/t/1002/deep-composer-autoload这几天看到 phphub 上面有人开始进坑怒看 laravel 源代码,于是我也凑个热闹来看下这个故事。众所周知 composer 是现代 PHP 项目的基石, 与古老的 pear 不同, composer 并不是一款专注于系统级别 php 管理的包管理系统,而是基于项...

宁德时代上位机,支持 适合北汽ec200,eu260,北斗星 x5e,威马EX5 等_「已注销」的博客-程序员宅基地

宁德时代上位机,支持 适合北汽ec200,eu260,北斗星 x5e,威马EX5 等车型,东风T735 凯普特新款EV350 江铃凯悦

使用PHP ping域名或IP_ruxingli的博客-程序员宅基地_php ping域名

废话没有,直接贴代码。<?php/** * 使用PHP检测能否ping通IP或域名 * @param type $address * @return boolean */function pingAddress($address) { // Windows 服务器下 $pingresult = exec("ping -n 1 {$address}", $outco

推荐文章

热门文章

相关标签