1

FrameLayoutレイアウト内に影を付けることを使用しています。その上に、画面上でドラッグ可能でサイズ変更可能なものFrameLayoutを追加しました。ImageView

画面の領域を消費するためにFrameLayoutandroid:layout_widthandroid:layout_heightを指定しました。fill_parentアプリの要件を満たす必要がありました。

質問

Imageドラッグできないように制限するにはどうすればよいFrameLayoutですか?

写真1と写真2:

画像1 画像3

写真3:

画像2

4

1 に答える 1

0

サイズとタッチポイントを参照してドラッグ可能なビューに制限を追加すると、問題が解決しました。

だから私がする必要があるのは、境界線と比較してタッチポイントをframelayout取得することです。シナリオによっては、ドラッグ可能なビューに制限を設定します。

コードは、これらが私にとって完璧に機能したようなものです::

public boolean onTouch(View paramView, MotionEvent event)
    {
      ImageView view = (ImageView)paramView;
      switch (event.getAction() & MotionEvent.ACTION_MASK)


case MotionEvent.ACTION_MOVE:

          if (mode == DRAG) {
/*
* Restricting Image not to be draggable outside of FrameLayout
*/
              matrix.set(savedMatrix); //Top
              if(event.getY()==0)
              {
                  matrix.postTranslate(event.getX()+15-start.x, 0+15);
                  Log.d("Top", "Top...");
              }
              else if(event.getX()==0) //Left
              {
                  matrix.postTranslate(0+15, event.getY()-start.y+15);
                  Log.d("LEFT", "Left...");
              }
              else if((event.getY()-ImageHeight)>fm.getHeight()) //Bottom
              {
                  matrix.postTranslate(event.getX()-start.x+15, fm.getHeight()-ImageHeight+15);
                  Log.d("BOTTOM", "Bottom...");
              }
              else if((event.getX()-ImageWidth)>fm.getWidth()) //Right
              {
                  matrix.postTranslate(fm.getWidth()-ImageWidth+15, event.getY()-start.y+15);
                  Log.d("RIGHT", "Right....");
              }
              else if(event.getY()==0 && (event.getX()-ImageWidth)>fm.getWidth()) //Top -Right
              {
                  matrix.postTranslate(fm.getWidth()-ImageWidth-15, 15);
              }
              else if(event.getY()==0 &&event.getX()==0) //Top-Left
              {
                  matrix.postTranslate(15, 15);
              }
              else if((event.getY()-ImageHeight)>fm.getHeight() && event.getX()==0) //Bottom-Left
              {
                  matrix.postTranslate(15, fm.getHeight()-ImageHeight-15);
              }
              else if((event.getX()-ImageWidth)>fm.getWidth() && (event.getY()-ImageHeight)>fm.getHeight())
              {
                  matrix.postTranslate(fm.getWidth()-ImageWidth-15, fm.getHeight()-ImageHeight-15);
              }
              else
              {
                  matrix.postTranslate(event.getX() - start.x, event.getY() - start.y);  
                  Log.d("ACTION_MOVE", "Starting Point::"+start.x+","+start.y+" Ending Point::"+event.getX()+","+event.getY());
                  Log.d("ACTION_DOWN", "FrameLayout::"+fm.getWidth()+" ,"+fm.getHeight()+" ImageView:: "+view.getWidth()+", "+view.getHeight());

              }
          }
          else if (mode == ZOOM) {

              float newDist = spacing(event);
              Log.d(TAG, "newDist=" + newDist);
              if (newDist > 10f) {

                  matrix.set(savedMatrix);
                  float scale = newDist / oldDist;
                  matrix.postScale(scale, scale, mid.x, mid.y);
              }
          }
          break;
           }  
      view.setImageMatrix(matrix);
      return true;       
    }
于 2013-04-09T09:43:32.430 に答える