package com.demo.example.mytouch;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.OverScroller;
import android.widget.Scroller;
import androidx.appcompat.widget.AppCompatImageView;
public class TouchImageView extends AppCompatImageView {
private static final String DEBUG = "DEBUG";
private static final float SUPER_MAX_MULTIPLIER = 1.25f;
private static final float SUPER_MIN_MULTIPLIER = 0.75f;
public Context context;
private ZoomVariables delayedZoomVariables;
public float[] f781m;
public Fling fling;
private boolean imageRenderedAtLeastOnce;
public GestureDetector mGestureDetector;
public ScaleGestureDetector mScaleDetector;
private ScaleType mScaleType;
private float matchViewHeight;
private float matchViewWidth;
public Matrix matrix;
public float maxScale;
public float minScale;
public float normalizedScale;
private boolean onDrawReady;
private float prevMatchViewHeight;
private float prevMatchViewWidth;
private Matrix prevMatrix;
private int prevViewHeight;
private int prevViewWidth;
public State state;
private float superMaxScale;
private float superMinScale;
public int viewHeight;
public int viewWidth;
public GestureDetector.OnDoubleTapListener doubleTapListener = null;
public OnTouchImageViewListener touchImageViewListener = null;
public OnTouchListener userTouchListener = null;
public interface OnTouchImageViewListener {
void onMove();
}
public enum State {
NONE,
DRAG,
ZOOM,
FLING,
ANIMATE_ZOOM
}
private float getFixTrans(float f, float f2, float f3) {
float f4;
float f5;
if (f3 <= f2) {
f4 = f2 - f3;
f5 = 0.0f;
} else {
f5 = f2 - f3;
f4 = 0.0f;
}
if (f < f5) {
return (-f) + f5;
}
if (f > f4) {
return (-f) + f4;
}
return 0.0f;
}
public float getFixDragTrans(float f, float f2, float f3) {
if (f3 <= f2) {
return 0.0f;
}
return f;
}
public static class AnonymousClass1 {
static final int[] $SwitchMap$android$widget$ImageView$ScaleType;
static {
int[] iArr = new int[ScaleType.values().length];
$SwitchMap$android$widget$ImageView$ScaleType = iArr;
iArr[ScaleType.CENTER.ordinal()] = 1;
$SwitchMap$android$widget$ImageView$ScaleType[ScaleType.CENTER_CROP.ordinal()] = 2;
$SwitchMap$android$widget$ImageView$ScaleType[ScaleType.CENTER_INSIDE.ordinal()] = 3;
$SwitchMap$android$widget$ImageView$ScaleType[ScaleType.FIT_CENTER.ordinal()] = 4;
$SwitchMap$android$widget$ImageView$ScaleType[ScaleType.FIT_XY.ordinal()] = 5;
}
AnonymousClass1() {
}
}
public class CompatScroller {
boolean isPreGingerbread;
OverScroller overScroller;
Scroller scroller;
public CompatScroller(Context context) {
if (Build.VERSION.SDK_INT < 9) {
this.isPreGingerbread = true;
this.scroller = new Scroller(context);
return;
}
this.isPreGingerbread = false;
this.overScroller = new OverScroller(context);
}
public void fling(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8) {
if (this.isPreGingerbread) {
this.scroller.fling(i, i2, i3, i4, i5, i6, i7, i8);
} else {
this.overScroller.fling(i, i2, i3, i4, i5, i6, i7, i8);
}
}
public void forceFinished(boolean z) {
if (this.isPreGingerbread) {
this.scroller.forceFinished(z);
} else {
this.overScroller.forceFinished(z);
}
}
public boolean isFinished() {
if (this.isPreGingerbread) {
return this.scroller.isFinished();
}
return this.overScroller.isFinished();
}
public boolean computeScrollOffset() {
if (this.isPreGingerbread) {
return this.scroller.computeScrollOffset();
}
this.overScroller.computeScrollOffset();
return this.overScroller.computeScrollOffset();
}
public int getCurrX() {
if (this.isPreGingerbread) {
return this.scroller.getCurrX();
}
return this.overScroller.getCurrX();
}
public int getCurrY() {
if (this.isPreGingerbread) {
return this.scroller.getCurrY();
}
return this.overScroller.getCurrY();
}
}
private class DoubleTapZoom implements Runnable {
private static final float ZOOM_TIME = 500.0f;
private float bitmapX;
private float bitmapY;
private PointF endTouch;
private AccelerateDecelerateInterpolator interpolator = new AccelerateDecelerateInterpolator();
private long startTime = System.currentTimeMillis();
private PointF startTouch;
private float startZoom;
private boolean stretchImageToSuper;
private float targetZoom;
DoubleTapZoom(float f, float f2, float f3, boolean z) {
TouchImageView.this.setState(State.ANIMATE_ZOOM);
this.startZoom = TouchImageView.this.normalizedScale;
this.targetZoom = f;
this.stretchImageToSuper = z;
PointF transformCoordTouchToBitmap = TouchImageView.this.transformCoordTouchToBitmap(f2, f3, false);
this.bitmapX = transformCoordTouchToBitmap.x;
float f4 = transformCoordTouchToBitmap.y;
this.bitmapY = f4;
this.startTouch = TouchImageView.this.transformCoordBitmapToTouch(this.bitmapX, f4);
this.endTouch = new PointF((float) (TouchImageView.this.viewWidth / 2), (float) (TouchImageView.this.viewHeight / 2));
}
@Override
public void run() {
float interpolate = interpolate();
TouchImageView.this.scaleImage(calculateDeltaScale(interpolate), this.bitmapX, this.bitmapY, this.stretchImageToSuper);
translateImageToCenterTouchPosition(interpolate);
TouchImageView.this.fixScaleTrans();
TouchImageView touchImageView = TouchImageView.this;
touchImageView.setImageMatrix(touchImageView.matrix);
if (TouchImageView.this.touchImageViewListener != null) {
TouchImageView.this.touchImageViewListener.onMove();
}
if (interpolate < 1.0f) {
TouchImageView.this.compatPostOnAnimation(this);
} else {
TouchImageView.this.setState(State.NONE);
}
}
private void translateImageToCenterTouchPosition(float f) {
float f2 = this.startTouch.x + ((this.endTouch.x - this.startTouch.x) * f);
float f3 = this.startTouch.y +
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
我们将深入研究这个强大工具的关键功能,研究其增强图像大小调整、压缩和转换的潜力。 “压缩图像大小app”提供了一套全面的工具,包括图像调整器、图像到 PDF 转换器和照片压缩器。 它提供了一个无缝的解决方案,用于减小图像大小、压缩图像并将其转换为 PDF 格式。该工具支持各种图像格式,允许用户将 JPG 转换为 PNG、PNG 转换为 JPG、JPG 转换为 WEBP,反之亦然。值得注意的是,该应用程序可以离线运行,确保在没有互联网连接的情况下可访问性和功能性。 主要特征: 易于使用的界面 该功能可通过用户友好的界面轻松访问,为各个级别的用户提供便利。 离线操作 作为一个完全离线的应用程序,“减少图像大小”提供了压缩和调整图像大小的灵活性,而无需依赖互联网连接。 批量调整大小 同时高效地调整多个图像的大小,提供快速且简化的流程。图像转换器确保快速有效的性能。 图像转换为 PDF 将各种类型的图像(包括 JPG、PNG、JPEG 和 WEBP)转换为单个 PDF 文件。该工具简化了以紧凑格式保存和共享图像的过程。 轻松共享选项 该应用程序有助于在 Instagram、
资源推荐
资源详情
资源评论
收起资源包目录
压缩图像大小app - Android 项目源代码 (156个子文件)
gradlew.bat 2KB
.gitignore 127B
.gitignore 8B
build.gradle 2KB
build.gradle 544B
settings.gradle 16B
gradlew 5KB
gradle-wrapper.jar 52KB
TouchImageView.java 36KB
ImageConverterActivity.java 24KB
ImageCompressorActivity.java 21KB
JPGCreationActivity.java 15KB
ImageShareActivity.java 12KB
PDFListAdapter.java 7KB
Webfileadapter.java 7KB
ImageToPDFActivity.java 7KB
MainActivity.java 6KB
PDFCreationActivity.java 5KB
StartActivity.java 4KB
WEBPCreationActivity.java 4KB
AdAdmob.java 4KB
ImageResizerActivity.java 3KB
FullScreenViewActivity.java 3KB
MyCreationActivity.java 3KB
ImageUtil.java 2KB
ImageAdapter.java 2KB
WebActivity.java 2KB
Compressor.java 2KB
AllAdsKey.java 2KB
Constants.java 2KB
CustomViewFlipper.java 1KB
FeedWebp.java 557B
ItemClickListener.java 155B
MAGFileProvider.java 141B
delete.json 10KB
loading1.json 8KB
bebasneue_bold.otf 99KB
bookman_old_bold.otf 26KB
bookman_old_regular.otf 26KB
banner.png 116KB
no_creation_ic.png 54KB
img_mycreation.png 54KB
ic_my.png 52KB
insta_ic.png 48KB
main_image_comp.png 48KB
main_image_pdf.png 48KB
main_image_conv.png 39KB
loading.png 35KB
wa_ic.png 32KB
logo.png 27KB
thankyou.png 23KB
rating.png 18KB
info.png 17KB
more.png 16KB
done.png 15KB
rename.png 12KB
compress.png 12KB
png.png 7KB
img_creation_ic.png 7KB
img_pdf_ic.png 7KB
jpg.png 6KB
share.png 6KB
icon200.png 6KB
fb_ic.png 5KB
memory.png 5KB
single_img_ic.png 5KB
menu.png 4KB
img_resize_ic.png 4KB
img_conv_ic.png 4KB
folder.png 3KB
next.png 2KB
delete.png 2KB
webp.png 2KB
ic_back.png 165B
proguard-rules.pro 849B
gradle.properties 652B
gradle-wrapper.properties 238B
roboto_medium.ttf 168KB
roboto_regular.ttf 167KB
roboto_bold.ttf 166KB
armwrestler.ttf 88KB
bengo.TTF 42KB
activity_image_converter.xml 16KB
activity_main.xml 15KB
activity_my_creation.xml 12KB
activity_image_share.xml 11KB
activity_image_compressor.xml 10KB
activity_image_resizer.xml 9KB
webp_dialog.xml 8KB
start_activity.xml 8KB
rate_dialog.xml 8KB
info_dialog.xml 7KB
thankyou_activity.xml 7KB
jpg_dialog.xml 5KB
delete_dialog.xml 5KB
activity_image_to_p_d_f.xml 5KB
compress_bottom_sheet.xml 5KB
rename_dialog.xml 4KB
AndroidManifest.xml 4KB
item_pdf_creation.xml 3KB
共 156 条
- 1
- 2
资源评论
小云同志你好
- 粉丝: 1048
- 资源: 931
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功