android 开源图片 查看,Android开源库--PhotoView图片查看

这篇文章介绍了如何在Android SimpleSampleActivity中使用PhotoViewAttacher库,实现了图片的缩放控制和触摸事件监听。通过实例展示了菜单选项来切换图片的显示模式,以及捕获和应用矩阵变化。
摘要由CSDN通过智能技术生成

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

* 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.sample;importandroid.app.Activity;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.graphics.Matrix;importandroid.graphics.RectF;importandroid.graphics.drawable.Drawable;importandroid.net.Uri;importandroid.os.Bundle;importandroid.os.Environment;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.ImageView;importandroid.widget.ImageView.ScaleType;importandroid.widget.TextView;importandroid.widget.Toast;importjava.io.File;importjava.io.FileOutputStream;importjava.util.Random;importuk.co.senab.photoview.PhotoViewAttacher;importuk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;importuk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;public class SimpleSampleActivity extendsActivity {static final String PHOTO_TAP_TOAST_STRING = "Photo Tap! X: %.2f %% Y:%.2f %% ID: %d";static final String SCALE_TOAST_STRING = "Scaled to: %.2ff";privateTextView mCurrMatrixTv;privatePhotoViewAttacher mAttacher;privateToast mCurrentToast;private Matrix mCurrentDisplayMatrix = null;

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

setContentView(R.layout.activity_main);

ImageView mImageView=(ImageView) findViewById(R.id.iv_photo);

mCurrMatrixTv=(TextView) findViewById(R.id.tv_current_matrix);

Drawable bitmap=getResources().getDrawable(R.drawable.wallpaper);

mImageView.setImageDrawable(bitmap);//The MAGIC happens here!

mAttacher = newPhotoViewAttacher(mImageView);//Lets attach some listeners, not required though!

mAttacher.setOnMatrixChangeListener(newMatrixChangeListener());

mAttacher.setOnPhotoTapListener(newPhotoTapListener());

}

@Overridepublic booleanonCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_menu, menu);return super.onCreateOptionsMenu(menu);

}

@Overridepublic voidonDestroy() {super.onDestroy();//Need to call clean-up

mAttacher.cleanup();

}

@Overridepublic booleanonPrepareOptionsMenu(Menu menu) {

MenuItem zoomToggle=menu.findItem(R.id.menu_zoom_toggle);assert null !=zoomToggle;

zoomToggle.setTitle(mAttacher.canZoom()?R.string.menu_zoom_disable : R.string.menu_zoom_enable);return super.onPrepareOptionsMenu(menu);

}

@Overridepublic booleanonOptionsItemSelected(MenuItem item) {switch(item.getItemId()) {caseR.id.menu_zoom_toggle:

mAttacher.setZoomable(!mAttacher.canZoom());return true;caseR.id.menu_scale_fit_center:

mAttacher.setScaleType(ScaleType.FIT_CENTER);return true;caseR.id.menu_scale_fit_start:

mAttacher.setScaleType(ScaleType.FIT_START);return true;caseR.id.menu_scale_fit_end:

mAttacher.setScaleType(ScaleType.FIT_END);return true;caseR.id.menu_scale_fit_xy:

mAttacher.setScaleType(ScaleType.FIT_XY);return true;caseR.id.menu_scale_scale_center:

mAttacher.setScaleType(ScaleType.CENTER);return true;caseR.id.menu_scale_scale_center_crop:

mAttacher.setScaleType(ScaleType.CENTER_CROP);return true;caseR.id.menu_scale_scale_center_inside:

mAttacher.setScaleType(ScaleType.CENTER_INSIDE);return true;caseR.id.menu_scale_random_animate:caseR.id.menu_scale_random:

Random r= newRandom();float minScale =mAttacher.getMinimumScale();float maxScale =mAttacher.getMaximumScale();float randomScale = minScale + (r.nextFloat() * (maxScale -minScale));

mAttacher.setScale(randomScale, item.getItemId()==R.id.menu_scale_random_animate);

showToast(String.format(SCALE_TOAST_STRING, randomScale));return true;caseR.id.menu_matrix_restore:if (mCurrentDisplayMatrix == null)

showToast("You need to capture display matrix first");elsemAttacher.setDisplayMatrix(mCurrentDisplayMatrix);return true;caseR.id.menu_matrix_capture:

mCurrentDisplayMatrix=mAttacher.getDisplayMatrix();return true;caseR.id.extract_visible_bitmap:try{

Bitmap bmp=mAttacher.getVisibleRectangleBitmap();

File tmpFile= File.createTempFile("photoview", ".png",

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));

FileOutputStream out= newFileOutputStream(tmpFile);

bmp.compress(Bitmap.CompressFormat.PNG,90, out);

out.close();

Intent share= newIntent(Intent.ACTION_SEND);

share.setType("image/png");

share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tmpFile));

startActivity(share);

Toast.makeText(this, String.format("Extracted into: %s", tmpFile.getAbsolutePath()), Toast.LENGTH_SHORT).show();

}catch(Throwable t) {

t.printStackTrace();

Toast.makeText(this, "Error occured while extracting bitmap", Toast.LENGTH_SHORT).show();

}return true;

}return super.onOptionsItemSelected(item);

}private class PhotoTapListener implementsOnPhotoTapListener {

@Overridepublic void onPhotoTap(View view, float x, floaty) {float xPercentage = x *100f;float yPercentage = y *100f;

showToast(String.format(PHOTO_TAP_TOAST_STRING, xPercentage, yPercentage, view== null ? 0: view.getId()));

}

}private voidshowToast(CharSequence text) {if (null !=mCurrentToast) {

mCurrentToast.cancel();

}

mCurrentToast= Toast.makeText(SimpleSampleActivity.this, text, Toast.LENGTH_SHORT);

mCurrentToast.show();

}private class MatrixChangeListener implementsOnMatrixChangedListener {

@Overridepublic voidonMatrixChanged(RectF rect) {

mCurrMatrixTv.setText(rect.toString());

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值