android - Rotate Frame layout which contains dynamic buttons -


i have framelayout add 4 imageview @ runtime in center contains main image user can perform different action face problem rotate layout view

currently on touch of rotate button i'm doing this

public void setrotatelistener() {     mrotateimage.setontouchlistener(new ontouchlistener() {         @override         public boolean ontouch(view v, motionevent event) {             float x = event.getx(0);             float y = event.gety(0);             float theta = gettheta(x, y);              switch (event.getaction() & motionevent.action_mask) {             case motionevent.action_pointer_down:                 theta_old = theta;                 break;             case motionevent.action_move:                 float delta_theta = theta - theta_old;                 theta_old = theta;                 int direction = (delta_theta > 0) ? 1 : -1;                 angle += 3 * direction;                  log.d("tag", "rotate angle : " + obj.getheight());                 obj.setrotation(angle);                 notifylistener(direction);                 break;             }             return true;         }     }); }  private float gettheta(float x, float y) {     float sx = x - (obj.getwidth() / 2.0f);     float sy = y - (obj.getheight() / 2.0f);      float length = (float) math.sqrt(sx * sx + sy * sy);     float nx = sx / length;     float ny = sy / length;     float theta = (float) math.atan2(ny, nx);      final float rad2deg = (float) (180.0 / math.pi);     float thetadeg = theta * rad2deg;      return (thetadeg < 0) ? thetadeg + 360.0f : thetadeg; } 

but can't expected result refer link https://github.com/rprouse/xkcdclock try rotate gesture , animation seems not working per move on screenwhile on touch rotate button wants rotate whole view in both direction clock , anticlockwise

i have design layout may work need. download demo here

java file

import android.annotation.suppresslint; import android.content.context; import android.graphics.bitmap; import android.graphics.canvas; import android.graphics.color; import android.graphics.colormatrixcolorfilter; import android.graphics.paint; import android.view.gesturedetector; import android.view.layoutinflater; import android.view.motionevent; import android.view.view; import android.widget.imagebutton; import android.widget.imageview; import android.widget.relativelayout;  public class clipart extends relativelayout {     int baseh;     int basew;     int basex;     int basey;     imagebutton btndel;     imagebutton btnrot;     imagebutton btnscl;     relativelayout clip;     context cntx;     boolean freeze = false;     int h;     int i;     imageview image;     string imageuri;     boolean isshadow;     int iv;     relativelayout laybg;     relativelayout laygroup;     relativelayout.layoutparams layoutparams;     public layoutinflater minflater;     int margl;     int margt;     float opacity = 1.0f;     bitmap originalbitmap;     int pivx;     int pivy;     int pos;     bitmap shadowbitmap;     float startdegree;     string[] v;      public clipart(context paramcontext) {         super(paramcontext);         cntx = paramcontext;         laygroup = this;          basex = 0;         basey = 0;         pivx = 0;         pivy = 0;          minflater = ((layoutinflater) paramcontext.getsystemservice("layout_inflater"));         minflater.inflate(r.layout.clipart, this, true);         btndel = ((imagebutton) findviewbyid(r.id.del));         btnrot = ((imagebutton) findviewbyid(r.id.rotate));         btnscl = ((imagebutton) findviewbyid(r.id.sacle));          layoutparams = new relativelayout.layoutparams(250, 250);         laygroup.setlayoutparams(layoutparams);         image = ((imageview) findviewbyid(r.id.clipart));         image.setimageresource(r.drawable.ic_launcher);          setontouchlistener(new view.ontouchlistener() {             final gesturedetector gesturedetector = new gesturedetector(clipart.this.cntx,                     new gesturedetector.simpleongesturelistener() {                 public boolean ondoubletap(motionevent paramanonymous2motionevent) {                     return false;                 }             });              public boolean ontouch(view paramanonymousview, motionevent event) {                 if (!clipart.this.freeze) {                     switch (event.getaction()) {                     case motionevent.action_down:                         laygroup.invalidate();                         gesturedetector.ontouchevent(event);                          laygroup.performclick();                         basex = ((int) (event.getrawx() - layoutparams.leftmargin));                         basey = ((int) (event.getrawy() - layoutparams.topmargin));                         break;                     case motionevent.action_move:                         int = (int) event.getrawx();                         int j = (int) event.getrawy();                         laybg = ((relativelayout) getparent());                         if ((i - basex > -(laygroup.getwidth() * 2 / 3))                                 && (i - basex < laybg.getwidth() - laygroup.getwidth() / 3)) {                             layoutparams.leftmargin = (i - basex);                         }                         if ((j - basey > -(laygroup.getheight() * 2 / 3))                                 && (j - basey < laybg.getheight() - laygroup.getheight() / 3)) {                             layoutparams.topmargin = (j - basey);                         }                         layoutparams.rightmargin = -1000;                         layoutparams.bottommargin = -1000;                         laygroup.setlayoutparams(layoutparams);                         break;                      }                      return true;                 }                 return true;             }         });         this.btnscl.setontouchlistener(new view.ontouchlistener() {             @suppresslint({ "newapi" })             public boolean ontouch(view paramanonymousview, motionevent event) {                 if (!clipart.this.freeze) {                     int j = (int) event.getrawx();                     int = (int) event.getrawy();                     layoutparams = (relativelayout.layoutparams) laygroup.getlayoutparams();                     switch (event.getaction()) {                      case motionevent.action_down:                         clipart.this.laygroup.invalidate();                         clipart.this.basex = j;                         clipart.this.basey = i;                         clipart.this.basew = clipart.this.laygroup.getwidth();                         clipart.this.baseh = clipart.this.laygroup.getheight();                         int[] loaction = new int[2];                         laygroup.getlocationonscreen(loaction);                         margl = layoutparams.leftmargin;                         margt = layoutparams.topmargin;                         break;                     case motionevent.action_move:                          float f2 = (float) math.todegrees(math.atan2(i - clipart.this.basey, j - clipart.this.basex));                         float f1 = f2;                         if (f2 < 0.0f) {                             f1 = f2 + 360.0f;                         }                         j -= clipart.this.basex;                         int k = - clipart.this.basey;                         = (int) (math.sqrt(j * j + k * k)                                 * math.cos(math.toradians(f1 - clipart.this.laygroup.getrotation())));                         j = (int) (math.sqrt(i * + k * k)                                 * math.sin(math.toradians(f1 - clipart.this.laygroup.getrotation())));                         k = * 2 + clipart.this.basew;                         int m = j * 2 + clipart.this.baseh;                         if (k > 150) {                             layoutparams.width = k;                             layoutparams.leftmargin = (clipart.this.margl - i);                         }                         if (m > 150) {                             layoutparams.height = m;                             layoutparams.topmargin = (clipart.this.margt - j);                         }                         clipart.this.laygroup.setlayoutparams(layoutparams);                         clipart.this.laygroup.performlongclick();                         break;                     }                     return true;                  }                 return clipart.this.freeze;             }         });         this.btnrot.setontouchlistener(new view.ontouchlistener() {             @suppresslint({ "newapi" })             public boolean ontouch(view paramanonymousview, motionevent event) {                 if (!clipart.this.freeze) {                     layoutparams = (relativelayout.layoutparams) clipart.this.laygroup.getlayoutparams();                     clipart.this.laybg = ((relativelayout) clipart.this.getparent());                     int[] arrayofint = new int[2];                     laybg.getlocationonscreen(arrayofint);                     int = (int) event.getrawx() - arrayofint[0];                     int j = (int) event.getrawy() - arrayofint[1];                     switch (event.getaction()) {                      case motionevent.action_down:                         clipart.this.laygroup.invalidate();                         clipart.this.startdegree = laygroup.getrotation();                         clipart.this.pivx = (layoutparams.leftmargin + clipart.this.getwidth() / 2);                         clipart.this.pivy = (layoutparams.topmargin + clipart.this.getheight() / 2);                         clipart.this.basex = (i - clipart.this.pivx);                         clipart.this.basey = (clipart.this.pivy - j);                         break;                      case motionevent.action_move:                         int k = clipart.this.pivx;                         int m = clipart.this.pivy;                         j = (int) (math.todegrees(math.atan2(clipart.this.basey, clipart.this.basex))                                 - math.todegrees(math.atan2(m - j, - k)));                         = j;                         if (j < 0) {                             = j + 360;                         }                         clipart.this.laygroup.setrotation((clipart.this.startdegree + i) % 360.0f);                         break;                     }                      return true;                 }                 return clipart.this.freeze;             }         });         this.btndel.setonclicklistener(new view.onclicklistener() {             public void onclick(view paramanonymousview) {                 if (!clipart.this.freeze) {                     laybg = ((relativelayout) clipart.this.getparent());                     laybg.performclick();                     laybg.removeview(clipart.this.laygroup);                 }             }         });     }       public void disableall() {         this.btndel.setvisibility(4);         this.btnrot.setvisibility(4);         this.btnscl.setvisibility(4);     }      public imageview getimageview() {         return this.image;     }      public void setfreeze(boolean paramboolean) {         this.freeze = paramboolean;     } } 

layout file

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">     <imagebutton android:id="@+id/rotate" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignparentbottom="true" android:layout_alignparentleft="true" android:adjustviewbounds="true" android:background="@android:color/transparent" android:scaletype="fitcenter" android:src="@drawable/rotation"/>     <imagebutton android:id="@+id/sacle" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignparentbottom="true" android:layout_alignparentright="true" android:adjustviewbounds="true" android:background="@android:color/transparent" android:scaletype="fitcenter" android:src="@drawable/pointer"/>     <imagebutton android:id="@+id/del" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:adjustviewbounds="true" android:background="@android:color/transparent" android:scaletype="fitcenter" android:src="@drawable/close"/>     <imageview android:id="@+id/clipart" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp"/>     </relativelayout> 

and images put in drawable

enter image description here enter image description here enter image description here


Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -