2012-09-28 4 views
2

Может кто-нибудь помочь мне реализовать масштабирование зума для нескольких изображений внутри макета в android.I сделал перетаскивание с граничными ограничениями в этом коде. Теперь я хочу увеличить изображения. Я делюсь мой код здесь для перетаскивания нескольких изображений с границами,Как реализовать масштабирование зума в android

TouchActivity extends Activity{ 
/** Called when the activity is first created. */ 
    ImageView robot=null,bird=null; 
    AbsoluteLayout aLayout,aLayout1; 
    int status=0,status1=0; 
    // We can be in one of these 3 states 
    static final int   NONE     = 0; 
    static final int   DRAG     = 1; 
    static final int   ZOOM     = 2; 
    int      mode     = NONE; 

    int      displayHeight, displayWidth; 
    Matrix      matrix     = new Matrix(); 
    Matrix      savedMatrix    = new Matrix(); 
    Matrix      matrixForView1   = new Matrix(); 
    Matrix      matrixForView2   = new Matrix(); 
    PointF      start     = new PointF(); 
    PointF      mid      = new PointF(); 
    float      oldDist     = 1f; 

    @Override  
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     aLayout= (AbsoluteLayout)findViewById(R.id.absLayout); 
     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     displayHeight = metrics.heightPixels; 
     displayWidth = metrics.widthPixels; 

     robot=(ImageView)findViewById(R.id.robot); 
     bird=(ImageView)findViewById(R.id.bird); 



     bird.setOnTouchListener(new OnTouchListener() { 


      @Override 
      public boolean onTouch(View v, MotionEvent event) { 


       status1=1; 
       Log.i("Touched BIRD ImageStatus1",""+status1); 
       //robot.setBackgroundColor(Color.WHITE); 


       return false; 
      } 
     }); 
     robot.setOnTouchListener(new OnTouchListener() { 


      @Override 
      public boolean onTouch(View v, MotionEvent event) { 


       status=1; 
       Log.i("Touched ROBOT ImageStatus",""+status); 
       //robot.setBackgroundColor(Color.WHITE); 


       return false; 
      } 
     }); 

     aLayout.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       // TODO Auto-generated method stub 
       Log.i("touch",""+event); 
       LayoutParams lp; 
       if((event.getX()>0&&event.getX()<320)&&(event.getY()>0 && event.getY()<480)) 
       { 
       if(status==1) // any event from down and move 
       { 
        lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,(int)event.getX()-robot.getWidth()/2,(int)event.getY()-robot.getHeight()/2); 
        robot.setLayoutParams(lp); 



       } 
       if(status1==1) // any event from down and move 
       { 
        Log.e("event.getX()", String.valueOf(event.getX())); 
        Log.e("event.getY()", String.valueOf(event.getY())); 

        lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,(int)event.getX()-bird.getWidth()/2,(int)event.getY()-bird.getHeight()/2); 
        bird.setLayoutParams(lp); 


       } 
       } 
       else 
       { 
        Log.e("image outside boundary","image outside boundary"); 
       } 

       if(event.getAction()==MotionEvent.ACTION_UP){ 


        if(status==1) 
        { 
        status=0; 

        robot.setBackgroundColor(Color.TRANSPARENT); 
        } 
        if(status1==1) 
        { status1=0; 

        bird.setBackgroundColor(Color.TRANSPARENT); 


        } 
           } 
       return true; 

      } 

     }); 



    } 

} 

Это мой макет

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

     <AbsoluteLayout 
     android:id="@+id/absLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <ImageView 
      android:id="@+id/robot" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" 
      android:scaleType="matrix" 
      /> 


     <ImageView 
      android:id="@+id/bird" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/white_bird" 
      android:scaleType="matrix" 

      android:layout_x="200dp" 
      /> 

    </AbsoluteLayout> 




</LinearLayout> 

Можно ли это сделать в этом коде? Будет ли метод матрицы делать трюк для меня?

Заранее благодарен!

ответ

1

Вы можете использовать WebView для этого:

mWebView = (WebView) findViewById(R.id.webview); 
mWebView.getSettings().setAllowFileAccess(true); 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.getSettings().setBuiltInZoomControls(true); 
String base = Environment.getExternalStorageDirectory().getAbsolutePath().toString(); 
String imagePath = "file:/"+ base + "/test.jpg"; 
String html = "<html><head></head><body><img src=\""+ imagePath + "\"></body></html>"; 
mWebView.loadData(html, "text/html","utf-8"); 
+0

Он не показывает anything.The значение я получаю от HTML является .Should я установить что-нибудь в макете? – playmaker420

+0

извините ... ваш путь к файлу должен начинаться с/mnt/sdarcd /, а не с файлом: // – Shrikant

+0

ли это решило вашу проблему? – Shrikant

Смежные вопросы