Создание растягиваемого и масштабируемого изображения в Android
Цель:
Создать изображение, которое можно рисовать и масштабировать,
Это означает, что когда я нажимаю кнопку, она становится
или когда я выключаю, это масштабируется.
* Обратите внимание, что чертежи должны быть увеличены в соответствии с видом
================================================== =============
Недавно я написал пользовательский вид для рисования, например:
public class DrawView extends ImageView {
private int color = Color.BLACK;
private float width = 4f;
private List<Holder> holderList = new ArrayList<Holder>();
private class Holder {
Path path;
Paint paint;
Holder(int color, float width) {
path = new Path();
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(width);
paint.setColor(color);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
}
}
public DrawView(Context context) {
super(context);
init();
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public DrawView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
holderList.add(new Holder(color, width));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (Holder holder : holderList) {
canvas.drawPath(holder.path, holder.paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
holderList.add(new Holder(color,width));
holderList.get(holderList.size() - 1).path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
holderList.get(holderList.size() - 1).path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
break;
default:
return false;
}
invalidate();
return true;
}
public void resetPaths() {
for (Holder holder : holderList) {
holder.path.reset();
}
invalidate();
}
public void setBrushColor(int color) {
this.color = color;
}
public void setWidth(float width) {
this.width = width;
}
}
И XML это:
<com.example.tool.DrawView
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true" />
Проблема в ,как сделать его масштабируемым? обратите внимание, чточертежи должны совпадать с изображением при масштабировании.
Попытайтесь использовать некоторую пользовательскую библиотеку изображений, но не повезло.
например Когда я использую просмотр фотографий, это может быть масштабирование, но рисунки не выравниваются, и уровень масштабирования будет сброшен после включения / выключения масштабирования.https://github.com/chrisbanes/PhotoView
Кроме того, найдите другую библиотеку, подобную этой, но не подходящую для случая с пользовательским представлением.https://github.com/matabii/scale-imageview-android
Обновление 1: демо
Рекомендовано ссылаться на это приложение, функция рисования на самом деле такая же, как то, чего я изо всех сил пытаюсь достичь, но я не могу понять, как они это делают
https://play.google.com/store/apps/details?id=com.zentertain.photoeditor&hl=en
Спасибо
Обновление 2: Из источника Сандип Марам
Большое спасибо Sandeep Maram, после тестирования кода все работает хорошо, остается только то, что чертежи не совпадают с масштабом. Пожалуйста, посмотрите на скриншот
До:
После:
Круг не масштабируется вверх / вниз при увеличении, было бы очень хорошо, если бы это исправить. также это не имеет значения, если изображение перекрывает кнопку.