Help on Image Drag

All your problems with Audio, Video and Images.

Help on Image Drag

Postby acool9 » Tue Jul 06, 2010 3:35 am

Hi all the pro,

please help me on this, i am intend to do the pinch zoom and drag on the image, but i don't know how to set on the limit on width and height, this caused me headache for few days, when i drag my image, i can drag out of the image, please help me!!

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. import android.app.ListActivity;
  2. import android.content.Intent;
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.graphics.Matrix;
  6. import android.graphics.PointF;
  7. import android.os.Bundle;
  8. import android.util.FloatMath;
  9. import android.util.Log;
  10. import android.view.MotionEvent;
  11. import android.view.View;
  12. import android.view.Window;
  13. import android.widget.Button;
  14. import android.widget.FrameLayout;
  15. import android.widget.ImageView;
  16. import android.widget.ListView;
  17. import android.widget.ScrollView;
  18. import android.widget.TextView;
  19.  
  20. public class FloorPlan extends ListActivity {
  21.         TextView title;
  22.         TextView content;
  23.         ImageView iv;
  24.         FrameLayout sv;
  25.         Button btnback;
  26.         Bitmap bm;
  27.         IconifiedTextListAdapter itla = new IconifiedTextListAdapter(this);
  28.         private static final String TAG = "Touch";
  29.  
  30.         // These matrices will be used to move and zoom image
  31.         Matrix matrix = new Matrix();
  32.         Matrix savedMatrix = new Matrix();
  33.  
  34.         // We can be in one of these 3 states
  35.         static final int NONE = 0;
  36.         static final int DRAG = 1;
  37.         static final int ZOOM = 2;
  38.         int mode = NONE;
  39.  
  40.         PointF start = new PointF();
  41.         PointF mid = new PointF();
  42.         float oldDist = 1f;
  43.  
  44.         @Override
  45.         public void onCreate(Bundle icicle) {
  46.                 super.onCreate(icicle);
  47.                 requestWindowFeature(Window.FEATURE_NO_TITLE);
  48.                 setContentView(R.layout.floorplan);
  49.  
  50.                 iv = (ImageView) findViewById(R.id.floorview);
  51.                 sv = (FrameLayout) findViewById(R.id.ScrollView02);
  52.                 btnback = (Button) findViewById(R.id.btn_back);
  53.  
  54.                 // Add items
  55.                 itla.addItem(new IconifiedText("LG3 Floor", getResources().getDrawable(
  56.                                 R.drawable.lg3_small)));
  57.                 itla.addItem(new IconifiedText("LG2A Level", getResources()
  58.                                 .getDrawable(R.drawable.lg2a_small)));
  59.                 itla.addItem(new IconifiedText("LG2 Level", getResources().getDrawable(
  60.                                 R.drawable.lg2_small)));
  61.                 itla.addItem(new IconifiedText("LG1 Level", getResources().getDrawable(
  62.                                 R.drawable.lg1_small)));
  63.                 itla.addItem(new IconifiedText("Ground Level", getResources()
  64.                                 .getDrawable(R.drawable.g_small)));
  65.                 itla.addItem(new IconifiedText("First Level", getResources()
  66.                                 .getDrawable(R.drawable.first_small)));
  67.                 itla.addItem(new IconifiedText("CP2 Floor", getResources().getDrawable(
  68.                                 R.drawable.cp2_small)));
  69.  
  70.                 // Display it
  71.                 setListAdapter(itla);
  72.  
  73.                 btnMainMenu();// main menu button
  74.  
  75.                 btnback.setOnClickListener(new View.OnClickListener() {
  76.                         public void onClick(View v) {
  77.                                
  78.                         }
  79.                 });
  80.  
  81.                 btnback.setOnTouchListener(new View.OnTouchListener() {
  82.                         public boolean onTouch(View v, MotionEvent event) {
  83.                                 if (event.getAction() == 0) {
  84.                                         btnback.setBackgroundResource(R.drawable.btnback_onclick);
  85.                                 } else if (event.getAction() == 1) {
  86.                                         btnback.setBackgroundResource(R.drawable.btnback);
  87.                                 }
  88.                                 return false;
  89.                         }
  90.                 });
  91.  
  92.         }
  93.  
  94.         public void btnMainMenu() {
  95.                 final Button btnmainmenu = (Button) findViewById(R.id.btn_mainmenu);
  96.                 btnmainmenu.setOnClickListener(new View.OnClickListener() {
  97.                         public void onClick(View v) {
  98.                                
  99.                         }
  100.                 });
  101.                 btnmainmenu.setOnTouchListener(new View.OnTouchListener() {
  102.                         public boolean onTouch(View v, MotionEvent event) {
  103.                                 if (event.getAction() == 0) {
  104.                                         btnmainmenu
  105.                                                         .setBackgroundResource(R.drawable.mainmenu_onclick);
  106.                                 } else if (event.getAction() == 1) {
  107.                                         btnmainmenu.setBackgroundResource(R.drawable.mainmenu);
  108.                                 }
  109.                                 return false;
  110.                         }
  111.                 });
  112.         }
  113.  
  114.         @Override
  115.         protected void onListItemClick(final ListView l, View v, int position,
  116.                         long id) {
  117.                 super.onListItemClick(l, v, position, id);
  118.  
  119.                 // Get the item that was clicked
  120.                 // System.out.println(position);
  121.                 l.setVisibility(View.GONE);
  122.                 sv.setVisibility(View.VISIBLE);
  123.  
  124.                 if (position == 0) {
  125.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.lg3);
  126.                         iv.setImageBitmap(bm);
  127. //                      iv.setBackgroundResource(R.drawable.lg3);
  128.                 } else if (position == 1) {
  129.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.lg2a);
  130.                         iv.setImageBitmap(bm);
  131. //                      iv.setBackgroundResource(R.drawable.lg2a);
  132.                 } else if (position == 2) {
  133.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.lg2);
  134.                         iv.setImageBitmap(bm);
  135. //                      iv.setBackgroundResource(R.drawable.lg2);
  136.                 } else if (position == 3) {
  137.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.lg1);
  138.                         iv.setImageBitmap(bm);
  139. //                      iv.setBackgroundResource(R.drawable.lg1);
  140.                 } else if (position == 4) {
  141.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.gf);
  142.                         iv.setImageBitmap(bm);
  143. //                      iv.setBackgroundResource(R.drawable.gf);
  144.                 } else if (position == 5) {
  145.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.ff);
  146.                         iv.setImageBitmap(bm);
  147. //                      iv.setBackgroundResource(R.drawable.ff);
  148.                 } else if (position == 6) {
  149.                         bm = BitmapFactory.decodeResource(getResources(), R.drawable.cp2);
  150.                         iv.setImageBitmap(bm);
  151. //                      iv.setBackgroundResource(R.drawable.cp2);
  152.                 }
  153.  
  154.                 btnback.setOnClickListener(new View.OnClickListener() {
  155.                         public void onClick(View v) {
  156.                                 if (l.getVisibility() == View.GONE) {
  157.                                         l.setVisibility(View.VISIBLE);
  158.                                         sv.setVisibility(View.GONE);
  159.                                 } else if (l.getVisibility() == View.VISIBLE) {
  160.                                        
  161.                                 }
  162.                         }
  163.                 });
  164.  
  165.                 btnback.setOnTouchListener(new View.OnTouchListener() {
  166.                         public boolean onTouch(View v, MotionEvent event) {
  167.                                 if (event.getAction() == 0) {
  168.                                         btnback.setBackgroundResource(R.drawable.btnback_onclick);
  169.                                 } else if (event.getAction() == 1) {
  170.                                         btnback.setBackgroundResource(R.drawable.btnback);
  171.                                 }
  172.                                 return false;
  173.                         }
  174.                 });
  175.  
  176.                 iv.setOnTouchListener(new View.OnTouchListener() {
  177.                         public boolean onTouch(View v, MotionEvent event) {
  178.  
  179.                                 // Dump touch event to log
  180. //                                 dumpEvent(event);
  181.  
  182.                                 // Handle touch events here...
  183.                                 switch (event.getAction() & MotionEvent.ACTION_MASK) {
  184.                                 case MotionEvent.ACTION_DOWN:
  185.                                         savedMatrix.set(matrix);
  186.                                         start.set(event.getX(), event.getY());
  187.                                         System.out.println("sx = " + (start.x));
  188.                                         System.out.println("sy = " + (start.y));
  189.                                         Log.d(TAG, "mode=DRAG");
  190.                                         mode = DRAG;
  191.                                         break;
  192.                                 case MotionEvent.ACTION_POINTER_DOWN:
  193.                                         oldDist = spacing(event);
  194.                                         Log.d(TAG, "oldDist=" + oldDist);
  195.                                         if (oldDist > 10f) {
  196.                                                 savedMatrix.set(matrix);
  197.                                                 midPoint(mid, event);
  198.                                                 mode = ZOOM;
  199.                                                 Log.d(TAG, "mode=ZOOM");
  200.                                         }
  201.                                         break;
  202.                                 case MotionEvent.ACTION_UP:
  203.                                         int xDiff = (int) Math.abs(event.getX() - start.x);
  204.                                         int yDiff = (int) Math.abs(event.getY() - start.y);
  205.                                         System.out.println("ex = " + (event.getX()));
  206.                                         System.out.println("ey = " + (event.getY()));
  207.                                         if (xDiff < 8 && yDiff < <img src="http://www.anddev.org/images/smilies/cool.png" alt="8)" title="Cool" />
  208.                                         {
  209.                                                 iv.performClick();
  210.                                         }
  211.                                 case MotionEvent.ACTION_POINTER_UP:
  212.                                         mode = NONE;
  213.                                         Log.d(TAG, "mode=NONE");
  214.                                         break;
  215.                                 case MotionEvent.ACTION_MOVE:
  216.                                         if (mode == DRAG) {
  217.                                                 // ...
  218.                                                 matrix.set(savedMatrix);
  219.                                                 if(event.getX() - start.x < 20)
  220.                                                 {
  221.                                                 matrix.postTranslate(event.getX() - start.x, event
  222.                                                                 .getY()
  223.                                                                 - start.y);
  224.                                                 }
  225.                                         } else if (mode == ZOOM) {
  226.                                                 float newDist = spacing(event);
  227.                                                 Log.d(TAG, "newDist=" + newDist);
  228.                                                 if (newDist > 10f) {
  229.                                                         matrix.set(savedMatrix);
  230.                                                         float scale = newDist / oldDist;
  231.                                                         matrix.postScale(scale, scale, mid.x, mid.y);
  232.                                                 }
  233.                                         }
  234.                                         break;
  235.                                 }
  236.  
  237.                                 iv.setImageMatrix(matrix);
  238.                                 return true; // indicate event was handled
  239.                         }
  240.                 });
  241.         }
  242.  
  243.         /** Show an event in the LogCat view, for debugging */
  244.         private void dumpEvent(MotionEvent event) {
  245.                 String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE",
  246.                                 "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };
  247.                 StringBuilder sb = new StringBuilder();
  248.                 int action = event.getAction();
  249.                 int actionCode = action & MotionEvent.ACTION_MASK;
  250.                 sb.append("event ACTION_").append(names[actionCode]);
  251.                 if (actionCode == MotionEvent.ACTION_POINTER_DOWN
  252.                                 || actionCode == MotionEvent.ACTION_POINTER_UP) {
  253.                         sb.append("(pid ").append(
  254.                                         action >> MotionEvent.ACTION_POINTER_ID_SHIFT);
  255.                         sb.append(")");
  256.                 }
  257.                 sb.append("[");
  258.                 for (int i = 0; i < event.getPointerCount(); i++) {
  259.                         sb.append("#").append(i);
  260.                         sb.append("(pid ").append(event.getPointerId(i));
  261.                         sb.append(")=").append((int) event.getX(i));
  262.                         sb.append(",").append((int) event.getY(i));
  263.                         if (i + 1 < event.getPointerCount())
  264.                                 sb.append(";");
  265.                 }
  266.                 sb.append("]");
  267.                 Log.d(TAG, sb.toString());
  268.         }
  269.  
  270.         private float spacing(MotionEvent event) {
  271.                 // ...
  272.                 float x = event.getX(0) - event.getX(1);
  273.                 float y = event.getY(0) - event.getY(1);
  274.                 return FloatMath.sqrt(x * x + y * y);
  275.         }
  276.  
  277.         private void midPoint(PointF point, MotionEvent event) {
  278.         // ...
  279.         float x = event.getX(0) + event.getX(1);
  280.         float y = event.getY(0) + event.getY(1);
  281.         point.set(x / 2, y / 2);
  282.     }
  283.  
  284. }
Parsed in 0.071 seconds, using GeSHi 1.0.8.4


this is my xml
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.         android:orientation="vertical" android:layout_width="fill_parent"
  4.         android:layout_height="fill_parent" android:background="#000000"
  5.         android:drawingCacheQuality="high"
  6.         android:id="@+id/lay_mallservices">
  7.  
  8.         <TableLayout android:background="@drawable/topbg"
  9.                 android:layout_width="fill_parent" android:layout_height="40px"
  10.                 android:drawingCacheQuality="high" android:shrinkColumns="3">
  11.                 <TableRow>
  12.                         <Button android:id="@+id/btn_back"
  13.                                 android:background="@drawable/btnback" android:layout_width="46px"
  14.                                 android:layout_height="30px" android:drawingCacheQuality="high"
  15.                                 android:layout_marginTop="5px" />
  16.                         <ImageView android:background="@drawable/mymall_sunway"
  17.                                 android:layout_width="230px" android:layout_height="40px"
  18.                                 android:layout_marginLeft="0px" android:drawingCacheQuality="high" />
  19.                         <Button android:id="@+id/btn_mainmenu"
  20.                                 android:background="@drawable/mainmenu" android:layout_width="44px"
  21.                                 android:layout_height="30px" android:drawingCacheQuality="high"
  22.                                 android:layout_marginTop="5px" />
  23.                 </TableRow>
  24.         </TableLayout>
  25.  
  26.         <ListView android:id="@android:id/list"
  27.                 android:layout_width="fill_parent" android:smoothScrollbar="true"
  28.                 android:background="#000000" android:choiceMode="singleChoice"
  29.                 android:layout_height="fill_parent" android:visibility="visible">
  30.         </ListView>
  31.  
  32.         <FrameLayout
  33.                 android:id="@+id/ScrollView02" android:layout_height="fill_parent"
  34.                 android:layout_width="fill_parent" android:background="#FFFFFF"
  35.                 android:visibility="gone">
  36.                 <ImageView android:layout_width="fill_parent"
  37.                         android:layout_height="fill_parent" android:id="@+id/floorview"
  38.                         android:scrollbars="horizontal" android:scaleType="matrix" />
  39.         </FrameLayout>
  40. </LinearLayout>
  41.  
Parsed in 0.007 seconds, using GeSHi 1.0.8.4
acool9
Freshman
Freshman
 
Posts: 2
Joined: Mon Jun 28, 2010 3:24 am

Top

Return to Multimedia Problems

Who is online

Users browsing this forum: Google [Bot] and 16 guests