使用进度条控制画布控件缩放

- 移除顶部放大/缩小按钮,改用底部SeekBar进度条控制
- 缩放范围0.1-5.0对应进度条0-100
- 添加setScaleFactor()方法
This commit is contained in:
2026-04-28 10:01:10 +08:00
parent e07931fd3b
commit ae3a0c6f64
4 changed files with 58 additions and 31 deletions

View File

@@ -10,6 +10,7 @@ import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.SeekBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import cc.winboll.studio.libappbase.LogUtils;
@@ -78,22 +79,22 @@ public class CropActivity extends AppCompatActivity {
});
zoomContainer = findViewById(R.id.zoom_container);
findViewById(R.id.btn_zoom_in).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (zoomContainer != null) {
zoomContainer.zoomIn();
}
}
});
findViewById(R.id.btn_zoom_out).setOnClickListener(new View.OnClickListener() {
SeekBar seekBarZoom = findViewById(R.id.seekbar_zoom);
seekBarZoom.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onClick(View v) {
if (zoomContainer != null) {
zoomContainer.zoomOut();
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (zoomContainer != null && fromUser) {
float scale = 0.1f + (progress / 100f) * 4.9f;
zoomContainer.setScaleFactor(scale);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
cropCanvasView = findViewById(R.id.crop_canvas_view);

View File

@@ -13,7 +13,7 @@ import android.widget.FrameLayout;
public class ZoomContainerView extends FrameLayout {
private float scaleFactor = 1.0f;
private float minScale = 0.5f;
private float minScale = 0.1f;
private float maxScale = 5.0f;
private static final float ZOOM_STEP = 0.25f;
@@ -98,6 +98,12 @@ public class ZoomContainerView extends FrameLayout {
return scaleFactor;
}
public void setScaleFactor(float scale) {
scaleFactor = Math.max(minScale, Math.min(scale, maxScale));
requestLayout();
invalidate();
}
public void resetZoom() {
scaleFactor = 1.0f;
invalidate();