Obiettivo:Creazione di una vista un'immagine drawable & stradale in Android
Creare un imageview che è disegnabile stradale,
Ciò significa che quando si preme un pulsante per il, è disegnabile,
o quando si spegne, che è zoomabile.
* Si noti disegni dovrebbero diminuire allinearsi con la imageview
================================ ===============================
Recentemente ho scritto una visualizzazione dell'immagine drawable personalizzato come questo:
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;
}
}
E l'XML è:
<com.example.tool.DrawView
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true" />
il prob lem is, come renderlo zoomabile anche a? si noti che i disegni devono essere allineati con la visualizzazione di immagini durante lo zoom.
Tentativo di utilizzare una libreria di immagini personalizzate ma senza fortuna.
ad es. Quando uso PhotoView che può essere zoom, ma i disegni non allinearsi, e il livello di zoom ritorna dopo aver attivare/disattivare lo zoom https://github.com/chrisbanes/PhotoView
Inoltre, trovare qualche altra libreria del genere, ma non montare il caso visualizzazione personalizzata https://github.com/matabii/scale-imageview-android
Update1: demo
consigliato di fare riferimento a questa applicazione, la funzione di disegno è in realtà lo stesso di quello che ho Sto lottando per raggiungere, ma non riesco a capire come farlo fare
https://play.google.com/store/apps/details?id=com.zentertain.photoeditor&hl=en
Grazie
Update2: Da Sandeep Maram Fonte
Grazie mille Sandeep Maram, dopo testando il codice, tutto funziona bene, l'unica cosa che rimane è che i disegni non sono allineati con la vista zoom. Si prega di dare un'occhiata alla schermata
Prima:
Dopo:
Il cerchio non è scalare su/giù quando lo zoom, sarebbe davvero bello se sistemare le cose. anche questo non importa se l'immagine si sovrappone al pulsante.
come zoom applicare per la vista, mostrami il codice? –
è facile: non utilizzare un ** personalizzato ImageView **, utilizzare un ** personalizzato Drawable **, quindi passare Drawable a 'ImageView.setImageDrawable()' – pskink
aggiornato, grazie – user3538235