package com.cretin.collegehelper.views;
/**
* Created by cretin on 16/3/1.
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.OverScroller;
import android.widget.Scroller;
/**
* Created by liuheng on 2015/6/21.
* <p></p>
* 如有任何意见和建议可邮件 [email protected]
*/
public class PhotoView extends ImageView {
private final static int MIN_ROTATE = 35;
private final static int ANIMA_DURING = 320;
private final static float MAX_SCALE = 2.5f;
private int MAX_OVER_SCROLL = 0;
private int MAX_FLING_OVER_SCROLL = 0;
private int MAX_OVER_RESISTANCE = 0;
private int MAX_ANIM_FROM_WAITE = 500;
private Matrix mBaseMatrix = new Matrix();
private Matrix mAnimaMatrix = new Matrix();
private Matrix mSynthesisMatrix = new Matrix();
private Matrix mTmpMatrix = new Matrix();
private RotateGestureDetector mRotateDetector;
private GestureDetector mDetector;
private ScaleGestureDetector mScaleDetector;
private OnClickListener mClickListener;
private ScaleType mScaleType;
private boolean hasMultiTouch;
private boolean hasDrawable;
private boolean isKnowSize;
private boolean hasOverTranslate;
private boolean isEnable = false;
private boolean isInit;
private boolean mAdjustViewBounds;
// 当前是否处于放大状态
private boolean isZoonUp;
private boolean canRotate;
private boolean imgLargeWidth;
private boolean imgLargeHeight;
private float mRotateFlag;
private float mDegrees;
private float mScale = 1.0f;
private int mTranslateX;
private int mTranslateY;
private float mHalfBaseRectWidth;
private float mHalfBaseRectHeight;
private RectF mWidgetRect = new RectF();
private RectF mBaseRect = new RectF();
private RectF mImgRect = new RectF();
private RectF mTmpRect = new RectF();
private RectF mCommonRect = new RectF();
private PointF mScreenCenter = new PointF();
private PointF mScaleCenter = new PointF();
private PointF mRotateCenter = new PointF();
private Transform mTranslate = new Transform();
private RectF mClip;
private Info mInfo;
private long mInfoTime;
private Runnable mCompleteCallBack;
public OnDropListener getmDropListener() {
return mDropListener;
}
public void setmDropListener(OnDropListener mDropListener) {
this.mDropListener = mDropListener;
mRotateDetector.setDropListener(mDropListener);
}
public boolean isZoonUp() {
return isZoonUp;
}
private OnDropListener mDropListener;
private float[] mValues = new float[16];
public PhotoView(Context context) {
super(context);
init();
}
public PhotoView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PhotoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
super.setScaleType(ScaleType.MATRIX);
if (mScaleType == null) mScaleType = ScaleType.CENTER_INSIDE;
mRotateDetector = new RotateGestureDetector(mRotateListener);
mDetector = new GestureDetector(getContext(), mGestureListener);
mScaleDetector = new ScaleGestureDetector(getContext(), mScaleListener);
float density = getResources().getDisplayMetrics().density;
MAX_OVER_SCROLL = (int) (density * 30);
MAX_FLING_OVER_SCROLL = (int) (density * 30);
MAX_OVER_RESISTANCE = (int) (density * 140);
}
public static int getDefaultAnimaDuring() {
return ANIMA_DURING;
}
@Override
public void setOnClickListener(OnClickListener l) {
super.setOnClickListener(l);
mClickListener = l;
}
@Override
public void setScaleType(ScaleType scaleType) {
ScaleType old = mScaleType;
mScaleType = scaleType;
if (old != scaleType)
initBase();
}
public void enable() {
isEnable = true;
}
public void disenable() {
isEnable = false;
}
/**
*/
public void setMaxAnimFromWaiteTime(int wait) {
MAX_ANIM_FROM_WAITE = wait;
}
@Override
public void setImageResource(int resId) {
Drawable drawable = null;
try {
drawable = getResources().getDrawable(resId);
} catch (Exception e) {
}
setImageDrawable(drawable);
}
@Override
public void setImageDrawable(Drawable drawable) {
super.setImageDrawable(drawable);
if (drawable == null) {
hasDrawable = false;
return;
}
if (!hasSize(drawable))
return;
if (!hasDrawable) {
hasDrawable = true;
}
initBase();
}
private boolean hasSize(Drawable d) {
if ((d.getIntrinsicHeight() <= 0 || d.getIntrinsicWidth() <= 0)
&& (d.getMinimumWidth() <= 0 || d.getMinimumHeight() <= 0)
&& (d.getBounds().width() <= 0 || d.getBounds().height() <= 0)) {
return false;
}
return true;
}
private int getDrawableWidth(Drawable d) {
int width = d.getIntrinsicWidth();
if (width <= 0) width = d.getMinimumWidth();
if (width <= 0) width = d.getBounds().width();
return width;
}
private int getDrawableHeight(Drawable d) {
int height = d.getIntrinsicHeight();
if (height <= 0) height = d.getMinimumHeight();
if (height <= 0) height = d.getBounds().height();
return height;
}
private void initBase() {
if (!hasDrawable) return;
if (!isKnowSize) return;
mBaseMatrix.reset();
mAnimaMatrix.reset();
isZoonUp = false;
Drawable img = getDrawable();
int w = getWidth();
int h = getHeight();
int imgw = getDrawableWidth(img);
int imgh = getDrawableHeight(img);
mBaseRect.set(0, 0, imgw, imgh);
// 以图片中心点居中位移
int tx = (w - imgw) / 2;
int ty = (h - imgh) / 2;
float sx = 1;
float sy = 1;
// 缩放,默认不超过屏幕大小
if (imgw > w) {
sx = (float) w / imgw;
}
if (imgh > h) {
sy = (float) h / imgh;
}
float scale = sx < sy ? sx : sy;
mBaseMatrix.reset();
mBaseMatrix.postTranslate(tx, ty);
mBaseMatrix.postScale(scale, scale, mScreenCenter.x, mScreenCenter.y);
mBaseMatrix.mapRect(mBaseRect);
mHalfBaseRectWidth = mBaseRect.width() / 2;
mHalfBaseRectHeight = mBaseRect.height() / 2;
mScaleCenter.set(mScreenCenter);
mRotateCenter.set(mScaleCenter);
executeTranslate();
switch (mScaleType) {
case CENTER:
initCenter();
break;
case CENTER_CROP:
initCenterCrop();
break;
case CENTER_INSIDE:
initCenterInside();
break;
case FIT_CENTER:
initFitCenter();
break;
case FIT_START:
initFitStart();
break;
case FIT_END:
initFitEnd();
break;
case FIT_XY:
initFitXY();
break;
}
isInit = true;
没有合适的资源?快使用搜索试试~ 我知道了~
毕业设计&课设--大学毕业设计-校园小助手.zip
共334个文件
java:118个
xml:101个
png:91个
需积分: 5 0 下载量 72 浏览量
2024-02-20
00:03:38
上传
评论
收藏 2.17MB ZIP 举报
温馨提示
毕业设计&课设--大学毕业设计-校园小助手
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计&课设--大学毕业设计-校园小助手.zip (334个子文件)
gradlew.bat 2KB
.gitignore 97B
.gitignore 7B
.gitignore 7B
build.gradle 2KB
build.gradle 649B
build.gradle 641B
settings.gradle 26B
gradlew 5KB
jxl.jar 688KB
AMap_Location_V2.4.1_20160414.jar 301KB
Bmob_Push_V0.8beta_20160420.jar 119KB
gradle-wrapper.jar 52KB
PhotoView.java 40KB
ImageUtils.java 19KB
PhotosFragment.java 15KB
UpdateUserInfoActivity.java 15KB
MainMineFragment.java 14KB
MainDiscoverAdapter.java 14KB
CameraInterface.java 14KB
LoginActivity.java 13KB
ReportActivity.java 12KB
UserDetailsActivity.java 12KB
PaperingActivity.java 11KB
NewPaperActivity.java 11KB
CameraFragment.java 10KB
Kanner.java 8KB
VoteDetailsActivity.java 8KB
SendActivity.java 7KB
MainHomeFragment.java 7KB
OpenFileDialog.java 7KB
LocationService.java 6KB
AddMembersActivity.java 6KB
PaperManagerActivity.java 6KB
NetWorkUtil.java 6KB
ForgetPswActivity.java 6KB
ImageGridAdapter.java 6KB
CameraPhotoActivity.java 5KB
CreateNewVoteActivity.java 5KB
SelectPopupWindow.java 5KB
SelectPicUtils.java 5KB
TeacherOnLineActivity.java 5KB
SendTopicIntentService.java 5KB
MainActivity.java 5KB
FragmentTabUtils.java 5KB
NetworkStateReceiver.java 5KB
BaseApp.java 4KB
PaperMyJoinedActivity.java 4KB
MainCourseFragment.java 4KB
FolderAdapter.java 4KB
ImageFragment.java 4KB
ListViewNewPaperAdapter.java 4KB
PaperMyCreatedActivity.java 4KB
ListViewPaperManagerAdapter.java 4KB
ChatMsgViewAdapter.java 4KB
VoteMyJoinInUnFinishActivity.java 4KB
UserVoteActivity.java 4KB
TakePhotoView.java 3KB
CamParaUtil.java 3KB
VoteMangerActivity.java 3KB
SeeBigBitmapActivity.java 3KB
RotateGestureDetector.java 3KB
AddMemberListViewAdapter.java 3KB
PaperMyFinishedActivity.java 3KB
VoteMyJoinInActivity.java 3KB
UserModel.java 3KB
GlobalData.java 3KB
Images.java 2KB
BigBitmapUtils.java 2KB
GridViewAdapter.java 2KB
MainVoteFragment.java 2KB
ProgressWebView.java 2KB
ListViewMyFinishedAdapter.java 2KB
ShowWebViewActivity.java 2KB
PaperResultModel.java 2KB
HackyViewPager.java 2KB
ListViewPaperMyJoinAdapter.java 2KB
VoteModel.java 2KB
PaperDetailsActivity.java 2KB
CameraSurfaceView.java 2KB
ChatMsgEntity.java 2KB
VoteMyJoinUnFinishedAdapter.java 2KB
DisplayUtil.java 2KB
SpalshActivity.java 2KB
CommonAdapter.java 2KB
ViewHolders.java 2KB
Image.java 1KB
FlowModel.java 1KB
SquareLayout.java 1KB
PaperSendModel.java 1KB
CircleTransform.java 1KB
VoteManagerListViewAdapter.java 1KB
ListViewPaperMyCreateAdapter.java 1KB
VoteDetailsListViewAdapter.java 1KB
CheckUtils.java 1KB
CommentModel.java 1KB
CropOptionAdapter.java 1KB
VoteMyJoininListViewAdapter.java 1KB
ImageViewPagerAdapter.java 1KB
CommonGridViewAdapter.java 1KB
共 334 条
- 1
- 2
- 3
- 4
资源评论
Kwan的解忧杂货铺
- 粉丝: 1w+
- 资源: 3651
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功