Mục tiêu:Tạo một cái nhìn hình ảnh drawable & Zoomable trong android
Tạo một ImageView đó là drawable và Zoomable,
Điều đó có nghĩa khi tôi bấm một nút để vào, nó là drawable,
hoặc khi tôi tắt, có thể thu phóng.
* Chú ý vẽ nên zoom phù hợp với các ImageView
================================ ===============================
Gần đây tôi đã viết một cái nhìn hình ảnh tùy chỉnh drawable như thế này:
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;
}
}
Và XML là:
<com.example.tool.DrawView
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true" />
các prob lem là, cách làm cho nó có thể zoom cũng như? lưu ý rằng các bản vẽ phải phù hợp với số lần xem ảnh khi phóng to.
Cố gắng sử dụng một số thư viện hình ảnh tùy chỉnh nhưng không có may mắn.
ví dụ: Khi tôi sử dụng PhotoView nó có thể zoom nhưng các bản vẽ không sắp xếp, và mức độ phóng sẽ thiết lập lại sau khi tôi bật/tắt các phóng to https://github.com/chrisbanes/PhotoView
Ngoài ra, tìm thấy một số thư viện khác như thế nhưng không phù hợp với trường hợp giao diện tùy chỉnh https://github.com/matabii/scale-imageview-android
Update1: bản demo
Đề xuất để tham khảo ứng dụng này, các chức năng vẽ thực sự là giống như những gì tôi là đấu tranh để đạt được, nhưng tôi không thể tìm ra cách họ làm cho nó thực hiện
https://play.google.com/store/apps/details?id=com.zentertain.photoeditor&hl=en
Cảm ơn
Update2: Từ Sandeep Maram Nguồn
Thanks a lot Sandeep Maram, sau khi kiểm tra mã, mọi thứ hoạt động tốt, điều duy nhất còn lại là bản vẽ không thẳng hàng với chế độ xem thu phóng. Xin hãy nhìn vào ảnh chụp màn hình
Trước:
Sau:
Vòng tròn không được mở rộng lên/xuống khi zoom, sẽ thực sự đẹp nếu khắc phục điều đó. cũng không quan trọng nếu hình ảnh chồng chéo lên nút.
cách thu phóng áp dụng cho chế độ xem, hiển thị cho tôi mã? –
dễ dàng của nó: không sử dụng tùy chỉnh ** ImageView **, sử dụng tùy chỉnh ** Drawable **, sau đó vượt qua Drawable đó để 'ImageView.setImageDrawable()' – pskink
được cập nhật, cảm ơn – user3538235