触摸屏android-用zoom放大缩小图片

图片缩小  时间:2021-02-21  阅读:()

用zoom放大缩小缩缩片缩import android.app.Activity;import android.os.Bundle;public class zooming extends Activity{

/**Called when the activity is first created.*/

@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(new Zoom(this));

}

}

<pre name="code"class="java">import android.content.Context;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.view.KeyEvent;import android.view.View;public class Zoom extends View{private Drawable image;private int zoomControler=20;public Zoom(Context context)

{super(context);image=context.getResources().getDrawable(R.drawable.icon);setFocusable(true);

}

@Overrideprotected void onDraw(Canvas canvas) {

//TODO Auto-generated method stubsuper.onDraw(canvas);

//here u can control the width and height of the images. . . . . . . . this line is very importantimage.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);image.draw(canvas);

}

@Overridepublic boolean onKeyDown(int keyCode,KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_DPAD_UP)//zoom inzoomControler+=10;if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) //zoom outzoomControler-=10;if(zoomControler<10)zoomControler=10;invalidate();return true;

}

}package com.min.Test_Gallery;

import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.Matrix;import android.os.Bundle;import android.util.DisplayMetrics;import android.util.Log;import android.view.GestureDetector;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.view.GestureDetector.OnGestureListener;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;public class DisplayImage extends Activity implementsOnTouchListener, OnGestureListener {private static final String TAG = "DisplayImage";private static final int FLING_MIN_DISTANCE = 100;private static final int FLING_MIN_VELOCITY = 200;

/*相量声明*/private ImageView mImageView;private Button mButton01;private Button mButton02;private FrameLayout layout1;private LinearLayout layoutImage;private Bitmap bmp;private int id=0;private int displayWidth;private int displayHeight;private float scaleWidth=1;private float scaleHeight=1;private GestureDetector mGestureDetector;

/** Called when the activity is first created. */

@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState) ;

/*加display.xml Layout */setContentView(R.layout.display) ;

/*取得屏幕分辨率大小*/

DisplayMetrics dm=new DisplayMetrics( ) ;getWindowManager( ) .getDefaultDisplay( ) .getMetrics(dm) ;displayWidth=dm.widthPixels;displayHeight=dm.heightPixels;

/*初始化相量*/

Bundle bundle = this.getIntent( ) .getExtras( ) ;

Integer imageId = bundle.getInt("imageId") ;

Log.i(TAG, "onCreate, imageId = " + imageId) ;bmp=BitmapFactory.decodeResource(getResources( ) ,imageId) ;mImageView = (ImageView)findViewById(R.id.myImageView) ;mImageView.setImageBitmap(bmp) ;mImageView.setOnTouchListener(this) ;mImageView.setLongClickable(true) ;layout1 = (FrameLayout)findViewById(R.id.layout1) ;layoutImage =(LinearLayout)findViewById(R.id.layoutImage) ;mButton01 = (Button)findViewById(R.id.myButton1) ;mButton02 = (Button)findViewById(R.id.myButton2) ;

/* 小按onClickListener */mButton01.setOnClickListener(new

Button.OnClickListener( ) {

@Overridepublic void onClick(View v) {small( ) ;

}

} ) ;

/*放大按onClickListener */mButton02.setOnClickListener(new

Button.OnClickListener( ) {

@Overridepublic void onClick(View v) {big( ) ;

}

} ) ;

}

//用触触摸屏由1个MotionEvent ACTION_DOWN触

@Overridepublic boolean onDown(MotionEvent e) {

// TODO Auto-generated method stub

// Toast.makeText(this, "onDown",Toa s t.LENGTH_SHOR T) .sh o w() ;

Log.i(TAG, "onDown. . . ") ;return false;

}

/*用按下触摸屏、快速移后松由1个MotionEvent ACTION_DOWN,

*多个ACTION_MOVE, 1个ACTION_UP触

*参数解

* e1 第1个ACTION_DOWN MotionEvent

* e2最后一个ACTION_MOVE MotionEvent

* vel oci tyXX上的移速度像素/秒

* velocityYY上的移速度像素/秒

*触条件 

* X 的坐 位移大于FL ING_MIN_DIS TANCE 且移 速度大于FLING_MIN_VELOCITY个像素/秒

* @seeandroid.view.GestureDetector$OnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)

*/

@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, floatvelocityX,float velocityY) {

// TODO Auto-generated method stub

Log.i(TAG, "onFling. . . ") ;if (e1.getX( ) - e2.getX( ) > FLING_MIN_DISTANCE

&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {

// Fling left

Toast.makeText(this, "Fling Left",Toast.LENGTH_SHORT) .show( ) ;

} else if (e2.getX( ) - e1.getX( ) > FLING_MIN_DISTANCE

&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {

// Fling right

Toast.makeText(this, "Fling Right",Toast.LENGTH_SHORT) .show( ) ;

}return false;

}

//用按触摸屏由多个MotionEvent ACTION_DOWN触

@Overridepublic void onLongPress(MotionEvent e) {

// TODO Auto-generated method stub

Log.i(TAG, "onLongPress. . . ") ;

}

//用按下触摸屏 并拖 由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触

@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX,float distanceY) {

// TODO Auto-generated method stub

Log.i(TAG, "onScroll. . . ") ;return false;

}

//用触触摸屏尚未松或拖由一个1个MotionEvent ACTION_DOWN触

//注意和onDown()的区强的是没有松或者拖的状

@Overridepublic void onShowPress(MotionEvent e) {

// TODO Auto-generated method stub

Log.i(TAG, "onShowPress. . . ") ;

}

//用 触触摸屏后松由一个1个MotionEvent ACTION_UP触@Overridepublic boolean onSingleTapUp(MotionEvent e) {

// TODO Auto-generated method stub

Log.i(TAG, "onSingleTapUp. . . ") ;return false;

}

@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stub

Log.i(TAG, "onTouch. . . ") ;

// Set button visiblemButton01.setVisibility(View.VISIBLE) ;mButton02.setVisibility(View.VISIBLE) ;return mGestureDetector.onTouchEvent(event) ;}

// @Override

// public boolean onTouchEvent(MotionEvent event) {// // TODO Auto-generated method stub

// super.onTouchEvent(event) ;

//

// Log.i (TAG, "onTouchEvent") ;

// // Set button visible

// mButton01.setVisibility(View.VISIBLE) ;

// mButton02.setVisibility(View.VISIBLE) ;

//

// return true;

// }

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubsuper.onKeyDown(keyCode, event) ;

Log.i(TAG, "onKeyDown. . . ") ;

// Set button visiblemButton01.setVisibility(View.VISIBLE) ;mButton02.setVisibility(View.VISIBLE) ;return true;

}

/* 片小的method */private void small( ) {int bmpWidth=bmp.getWidth( ) ;int bmpHeight=bmp.getHeight( ) ;

Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = "+ bmpHeight) ;

/* 置片小的比例*/double scale=0.8;

/* 算出次要小的比例*/scaleWidth=(float) (scaleWidth*scale) ;scaleHeight=(float) (scaleHeight*scale) ;

/* 生reSize后的Bitmap象*/

Matrix matrix = new Matrix( ) ;matrix.postScale(scaleWidth, scaleHeight) ;

Bitmap resizeBmp =Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true) ;if(id==0) {

/*如果是第一次按就除原来默的ImageVi ew */layoutImage.removeView(mImageView) ;

} else {

/*如果不是第一次按就除上次放大小所生的ImageVi ew */layoutImage.removeView( (ImageView)findViewById(id) ) ;

}

/* 生新的ImageView放入reSize的Bitmap 象再放入Layout中*/id++;

ImageView imageView = new ImageView(this) ;imageView.setId(id) ;imageView.setImageBitmap(resizeBmp) ;layoutImage.addView(imageView) ;

Log.i(TAG, "imageView.getWidth( ) = " +imageView.getWidth( )

+ ", imageView.getHeight( ) = " +imageView.getHeight( ) ) ;setContentView(layout1) ;

/*因 片放到最大放大按会disable所以在小把它重 enable

*/mButton02.setEnabled(true) ;mButton02.setTextColor(Color.MAGENTA) ;

}

/* 片放大的method */private void big( ) {int bmpWidth=bmp.getWidth( ) ;int bmpHeight=bmp.getHeight( ) ;

Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = "+ bmpHeight) ;

/* 置片放大的比例*/double scale=1.25;

/* 算次要放大的比例*/scaleWidth=(float) (scaleWidth*scale) ;

scaleHeight=(float) (scaleHeight*scale) ;

/* 生reSize后的Bitmap象*/

Matrix matrix = new Matrix( ) ;matrix.postScale(scaleWidth, scaleHeight) ;

Bitmap resizeBmp =Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true) ;if(id==0) {

/*如果是第一次按就除原来置的ImageVi ew */layoutImage.removeView(mImageView) ;

} else {

/*如果不是第一次按就除上次放大小所生的ImageVi ew */layoutImage.removeView( (ImageView)findViewById(id) ) ;

}

/* 生新的ImageView放入reSize的Bitmap 象再放入Layout中*/id++;

ImageView imageView = new ImageView(this) ;imageView.setId(id) ;imageView.setImageBitmap(resizeBmp) ;layoutImage.addView(imageView) ;setContentView(layout1) ;

/*如果再放大会超屏幕大小就把Button disable */if( scaleWidth * scale * bmpWidth > bmpWidth * 3 | |scaleHeight * scale * bmpHeight > bmpWidth * 3 | |scaleWidth * scale * bmpWidth > displayWidth * 5| |scaleHeight * scale * bmpHeight > displayHeight *

5) {mButton02.setEnabled(false) ;mButton02.setTextColor(Color.GRAY) ;

} else {mButton02.setEnabled(true) ;mButton02.setTextColor(Color.MAGENTA) ;}

}

}display.xml文件

<?xml version="1.0" encoding="utf-8"?>

<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:id="@+id/layout1"

>

<ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"

3adapted some code to create a TouchImageView that supports multitouch(>21) It is inspiredby the book Hel lo,Android! (3rd edition)

It is contained within the fol lowing 3 fi les TouchImageViewjava WrapMotionEventjava

WrapMotionEvent java

TouchImageView.javaimport se.robertfoss.ChanImageBrowser.Viewer;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Matrix;import android.graphics.PointF;import android.util.FloatMath;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;public class TouchImageView extends ImageView{private static final String TAG="Touch";

//These matrices will be used to move and zoom image

Matrix matrix=new Matrix();

Matrix savedMatrix=new Matrix();

//We can be in one of these 3 statesstatic final int NONE=0;static final int DRAG=1;static final int ZOOM=2;int mode=NONE;

//Remember some things for zooming

PointF start=new PointF();

PointF mid=new PointF();float oldDist=1f;

Context context;

legionbox:美国、德国和瑞士独立服务器,E5/16GB/1Gbps月流量10TB起/$69/月起

legionbox怎么样?legionbox是一家来自于澳大利亚的主机销售商,成立时间在2014年,属于比较老牌商家。主要提供VPS和独立服务器产品,数据中心包括美国洛杉矶、瑞士、德国和俄罗斯。其中VPS采用KVM和Xen架构虚拟技术,硬盘分机械硬盘和固态硬盘,系统支持Windows。当前商家有几款大硬盘的独立服务器,可选美国、德国和瑞士机房,有兴趣的可以看一下,付款方式有PAYPAL、BTC等。...

Ceranetworks顶级合作伙伴 香港E3 16G 299元 香港E5 32G 650元 美国E3 16G 650元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

Hosteons - 限时洛杉矶/达拉斯/纽约 免费升级至10G带宽 低至年$21

Hosteons,一家海外主机商成立于2018年,在之前还没有介绍和接触这个主机商,今天是有在LEB上看到有官方发送的活动主要是针对LEB的用户提供的洛杉矶、达拉斯和纽约三个机房的方案,最低年付21美元,其特点主要在于可以从1G带宽升级至10G,而且是免费的,是不是很吸引人?本来这次活动是仅仅在LEB留言提交账单ID才可以,这个感觉有点麻烦。不过看到老龚同学有拿到识别优惠码,于是就一并来分享给有需...

图片缩小为你推荐
网页解密如何查看网页中的密码绵阳电信绵阳电信宽带套餐…具体点优酷路由宝怎么赚钱优酷路由宝是如何赚钱的?中国电信互联星空电信的互联星空服务是什么?bluestacksbluestacks怎么用手机区号有的手机号中间的号码是地区区号,那是什么卡不兼容软件和电脑不兼容会怎样?怎么点亮qq空间图标怎么点亮QQ空间的图标小米3大概多少钱小米3现在多少钱奇虎论坛奇虎论坛最新推荐歌曲列表·
187邮箱 openv singlehop 好看的桌面背景图片 云图标 元旦促销 tna官网 如何建立邮箱 申请免费空间和域名 创建邮箱 google台湾 架设邮件服务器 带宽租赁 西安主机 中国linux 申请免费空间 镇江高防 免费稳定空间 电信主机托管 移动王卡 更多