android 图片放大缩小,android 图片浏览功能 图片放大缩小 使用 photoview 双击或双指缩放的ImageView...

android 图片浏览功能  图片放大缩小

使用 photoview 双击或双指缩放的ImageView

使用多点触控和双击。

滚动,以平滑滚动甩。

github  下载地址:https://github.com/chrisbanes/PhotoView

实际效果参考

3a8f4a4b6383efda1ec91bb2b5a54dd4.png

图片来自 : http://a.code4app.com/android/PhotoView/5241a4026803fa1327000000

下载完成后 导入IDE里面

28256165e717148ab4d43d336516f2eb.png

将lib  添加进来

3d1010295add66cbb7b7879532cfc8ad.png

贴出 photoview的代码:

[java]  view plain copy

/*******************************************************************************

* Copyright 2011, 2012 Chris Banes.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*******************************************************************************/

packageuk.co.senab.photoview;

importandroid.content.Context;

importandroid.graphics.Bitmap;

importandroid.graphics.Matrix;

importandroid.graphics.RectF;

importandroid.graphics.drawable.Drawable;

importandroid.net.Uri;

importandroid.util.AttributeSet;

importandroid.view.GestureDetector;

importandroid.widget.ImageView;

importuk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;

importuk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;

importuk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;

publicclassPhotoViewextendsImageViewimplementsIPhotoView {

privatefinalPhotoViewAttacher mAttacher;

privateScaleType mPendingScaleType;

publicPhotoView(Context context) {

this(context,null);

}

publicPhotoView(Context context, AttributeSet attr) {

this(context, attr,0);

}

publicPhotoView(Context context, AttributeSet attr,intdefStyle) {

super(context, attr, defStyle);

super.setScaleType(ScaleType.MATRIX);

mAttacher = newPhotoViewAttacher(this);

if(null!= mPendingScaleType) {

setScaleType(mPendingScaleType);

mPendingScaleType = null;

}

}

/**

* @deprecated use {@link #setRotationTo(float)}

*/

@Override

publicvoidsetPhotoViewRotation(floatrotationDegree) {

mAttacher.setRotationTo(rotationDegree);

}

@Override

publicvoidsetRotationTo(floatrotationDegree) {

mAttacher.setRotationTo(rotationDegree);

}

@Override

publicvoidsetRotationBy(floatrotationDegree) {

mAttacher.setRotationBy(rotationDegree);

}

@Override

publicbooleancanZoom() {

returnmAttacher.canZoom();

}

@Override

publicRectF getDisplayRect() {

returnmAttacher.getDisplayRect();

}

@Override

publicMatrix getDisplayMatrix() {

returnmAttacher.getDrawMatrix();

}

@Override

publicbooleansetDisplayMatrix(Matrix finalRectangle) {

returnmAttacher.setDisplayMatrix(finalRectangle);

}

@Override

@Deprecated

publicfloatgetMinScale() {

returngetMinimumScale();

}

@Override

publicfloatgetMinimumScale() {

returnmAttacher.getMinimumScale();

}

@Override

@Deprecated

publicfloatgetMidScale() {

returngetMediumScale();

}

@Override

publicfloatgetMediumScale() {

returnmAttacher.getMediumScale();

}

@Override

@Deprecated

publicfloatgetMaxScale() {

returngetMaximumScale();

}

@Override

publicfloatgetMaximumScale() {

returnmAttacher.getMaximumScale();

}

@Override

publicfloatgetScale() {

returnmAttacher.getScale();

}

@Override

publicScaleType getScaleType() {

returnmAttacher.getScaleType();

}

@Override

publicvoidsetAllowParentInterceptOnEdge(booleanallow) {

mAttacher.setAllowParentInterceptOnEdge(allow);

}

@Override

@Deprecated

publicvoidsetMinScale(floatminScale) {

setMinimumScale(minScale);

}

@Override

publicvoidsetMinimumScale(floatminimumScale) {

mAttacher.setMinimumScale(minimumScale);

}

@Override

@Deprecated

publicvoidsetMidScale(floatmidScale) {

setMediumScale(midScale);

}

@Override

publicvoidsetMediumScale(floatmediumScale) {

mAttacher.setMediumScale(mediumScale);

}

@Override

@Deprecated

publicvoidsetMaxScale(floatmaxScale) {

setMaximumScale(maxScale);

}

@Override

publicvoidsetMaximumScale(floatmaximumScale) {

mAttacher.setMaximumScale(maximumScale);

}

@Override

// setImageBitmap calls through to this method

publicvoidsetImageDrawable(Drawable drawable) {

super.setImageDrawable(drawable);

if(null!= mAttacher) {

mAttacher.update();

}

}

@Override

publicvoidsetImageResource(intresId) {

super.setImageResource(resId);

if(null!= mAttacher) {

mAttacher.update();

}

}

@Override

publicvoidsetImageURI(Uri uri) {

super.setImageURI(uri);

if(null!= mAttacher) {

mAttacher.update();

}

}

@Override

publicvoidsetOnMatrixChangeListener(OnMatrixChangedListener listener) {

mAttacher.setOnMatrixChangeListener(listener);

}

@Override

publicvoidsetOnLongClickListener(OnLongClickListener l) {

mAttacher.setOnLongClickListener(l);

}

@Override

publicvoidsetOnPhotoTapListener(OnPhotoTapListener listener) {

mAttacher.setOnPhotoTapListener(listener);

}

@Override

publicOnPhotoTapListener getOnPhotoTapListener() {

returnmAttacher.getOnPhotoTapListener();

}

@Override

publicvoidsetOnViewTapListener(OnViewTapListener listener) {

mAttacher.setOnViewTapListener(listener);

}

@Override

publicOnViewTapListener getOnViewTapListener() {

returnmAttacher.getOnViewTapListener();

}

@Override

publicvoidsetScale(floatscale) {

mAttacher.setScale(scale);

}

@Override

publicvoidsetScale(floatscale,booleananimate) {

mAttacher.setScale(scale, animate);

}

@Override

publicvoidsetScale(floatscale,floatfocalX,floatfocalY,booleananimate) {

mAttacher.setScale(scale, focalX, focalY, animate);

}

@Override

publicvoidsetScaleType(ScaleType scaleType) {

if(null!= mAttacher) {

mAttacher.setScaleType(scaleType);

} else{

mPendingScaleType = scaleType;

}

}

@Override

publicvoidsetZoomable(booleanzoomable) {

mAttacher.setZoomable(zoomable);

}

@Override

publicBitmap getVisibleRectangleBitmap() {

returnmAttacher.getVisibleRectangleBitmap();

}

@Override

publicvoidsetZoomTransitionDuration(intmilliseconds) {

mAttacher.setZoomTransitionDuration(milliseconds);

}

@Override

publicIPhotoView getIPhotoViewImplementation() {

returnmAttacher;

}

@Override

publicvoidsetOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) {

mAttacher.setOnDoubleTapListener(newOnDoubleTapListener);

}

@Override

protectedvoidonDetachedFromWindow() {

mAttacher.cleanup();

super.onDetachedFromWindow();

}

}

接下来将lib 导入自己的项目中使用

在自己的项目中使用  只需要在 xml 文件里面将  原有的imageview  替换为  uk.co.senab.photoview.PhotoView

就能使用

如图:

1cdec9a852292df0118d2107b6fb9858.png

非常方便快捷

github  下载地址:  https://github.com/chrisbanes/PhotoView

转自:http://blog.csdn.net/aaawqqq/article/details/43128111#comments

谢谢大家

版权声明:本文为博主原创文章,未经博主允许不得转载。

### 回答1: 在Android平台上,可以使用一些常用的手势操作来实现图片的平移、双指缩放双击放大缩小。 首先,为了实现平移功能,可以使用触摸事件的ACTION_MOVE来处理手指在屏幕上滑动的操作。通过计算滑动距离,可以改变图片的位置从而实现平移效果。 其次,双指缩放可以使用触摸事件的ACTION_POINTER_DOWN和ACTION_POINTER_UP来追踪并处理触摸屏幕上第二个手指按下和松开的操作。在处理时,可以通过计算两个手指触摸点之间的距离来改变图片缩放比例,从而实现双指缩放效果。 最后,双击放大缩小可以通过设置一个双击的监听器来实现。在双击监听器的回调方法中,可以根据当前的图片缩放状态来判断是进行放大操作还是缩小操作。并根据需要更改图片缩放比例,实现双击放大缩小功能。 在实现上述功能时,可以使用Android提供的一些核心类来辅助开发,如View、MotionEvent、GestureDetector等。同时,还可以结合自定义View和动画效果来提升用户体验,使图片的平移、缩放双击动作更加流畅和自然。 总之,通过合理运用触摸事件、手势识别、双击监听器等技术,可以在Android上实现图片的平移、双指缩放双击放大缩小功能,从而提升用户与应用程序的交互体验。 ### 回答2: 在Android开发中,可以通过使用ImageView控件来实现对图片的平移、双指缩放双击放大缩小操作。 1. 平移:可以通过使用Matrix类对ImageView进行变换来实现图片的平移。首先,我们需要为ImageView设置一个OnTouchListener来监听用户的手势操作。在手势操作的回调方法中,可以通过获取手指按下和移动的位置差来计算出需要平移的距离,然后通过设置Matrix的平移矩阵来实现图片的平移效果。 2. 双指缩放:可以通过GestureDetector类来监听双指缩放手势。在手势操作的回调方法中,可以获取到两个手指的起始位置和当前位置,通过计算两个手指之间的距离差来判断缩放的比例。然后,再通过设置Matrix的缩放矩阵来实现图片缩放效果。需要注意的是,在进行缩放操作时,还需要考虑到手指中心点的位置变化。 3. 双击放大缩小:也可以通过GestureDetector类来监听双击手势。在手势操作的回调方法中,可以判断是否发生了双击事件,并获取到双击的位置。当双击事件发生时,可以通过判断当前图片缩放比例来决定是放大还是缩小。通过设置Matrix的缩放矩阵和平移矩阵来实现图片放大缩小效果。 需要注意的是,为了实现图片的平移、双指缩放双击放大缩小操作,我们需要对ImageView进行一系列的监听和处理操作。同时,为了方便管理和控制这些操作,可以将相关的代码封装成一个自定义的图片控件,并在该控件中进行处理。 ### 回答3: Android 提供了多种方法来实现图片的平移、双指缩放双击放大缩小功能。 首先,要实现图片的平移,我们可以使用 GestureDetector 类。可以通过重写 onScroll() 方法来检测用户的滑动手势,然后将图片的位置进行相应的调整,从而实现平移效果。 其次,要实现双指缩放功能,我们可以借助 ScaleGestureDetector 类。通过重写 onScale() 方法,我们可以获取用户的缩放手势,并根据手势的缩放比例调整图片的尺寸,从而实现双指缩放的效果。 最后,要实现双击放大缩小功能,我们可以使用 GestureDetector 类。可以通过重写 onDoubleTap() 方法来检测用户的双击手势,然后根据当前图片的尺寸和双击事件的位置,来判断是进行放大还是缩小操作,最后将图片的尺寸进行相应的调整,实现双击放大缩小的效果。 需要注意的是,以上的功能实现是基于 Android 的原生 API,还有其他第三方库也提供了更便捷的方法来实现这些功能,例如 PhotoView 库,它提供了更多灵活的选项和交互效果,可以更加方便地实现图片的平移、缩放双击操作。 综上所述,Android 针对图片的平移、双指缩放双击放大缩小,可以通过重写相应的手势监听方法或使用第三方库来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值