2012-03-29 8 views
8

テキストビューでは、ピンチ機能(ズームイン/ズームアウト)を行いたいと考えています。ズーム用テキストをピンチで飾る

私はすでに

が、私はボタンを使用しても、それを行うことができます....多くのチュートリアルを参照してくださいが、いずれかがそれを行ったり、それを行う方法を知っている場合は任意の実り..please助け 私を取得していませんズームインとズームアウト、2本の指の挟み込みを使用しますか?

任意の助けいただければ幸いです。..コードに動作していない おかげ

setContentView(R.layout.main); 
    mainView =(LinearLayout)findViewById(R.id.linearLayout); 

    Button buttonZoomOut = (Button)findViewById(R.id.buttonZoomOut); 
    Button buttonNormal = (Button)findViewById(R.id.buttonNormal); 
    Button buttonZoomIn = (Button)findViewById(R.id.buttonZoomIn); 

    buttonZoomOut.setOnClickListener(new View.OnClickListener() {  
    public void onClick(View v) { 
    zoom(0.5f,0.5f,new PointF(0,0));  
    } 
    }); 
    buttonNormal.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
    zoom(1f,1f,new PointF(0,0)); 
    } 
    }); 
    buttonZoomIn.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
    zoom(2f,2f,new PointF(0,0)); 
    } 
    }); 
} 

/** zooming is done from here */ 
public void zoom(Float scaleX,Float scaleY,PointF pivot){ 
    mainView.setPivotX(pivot.x); 
    mainView.setPivotY(pivot.y); 
    mainView.setScaleX(scaleX); 
    mainView.setScaleY(scaleY); 
} 
+1

+1便利な質問です。 –

+0

[Android - ピンチズーム](http://stackoverflow.com/q/9519526/940096)多分これはあなたに役立ちます – Praveenkumar

+0

Downvote for duplicate。これは*多くの回*求められています。 – IneQuation

答えて

3

を使用すると、指のピンチを実装したい場合は、このsample codeは、Googleの開発者向けブログで与え見ることができます。

私はこれまでに試しました。それは働き、学習に良い。

+0

あなたは私の答えを見たことがありますか? – dreamtale

+0

yea-ah私は今それを見ています...テキストビューまたは画像ビューをズームするためのこのサンプルコードはありますか? – shyam

+0

イメージビューです。 – dreamtale

0

次のコードを試すことができます.... TextViewを画像に変換してからズームします。

パブリッククラスtempが活動OnTouchListener {

private static final String TAG = "Touch"; 

private static final float MIN_ZOOM = 1.0f; 

private static final float MAX_ZOOM = 5.0f; 

// These matrices will be used to move and zoom image 

Matrix matrix = new Matrix(); 

Matrix savedMatrix = new Matrix(); 

// 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; 

// Remember some things for zooming 

PointF start = new PointF(); 

PointF mid = new PointF(); 

float oldDist = 1f; 

//パブリック静的ArrayListのstrを実装して延びています。

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

TextView tv = new TextView(this); 
    LinearLayout.LayoutParams layoutParamsForText = new LinearLayout.LayoutParams(
      width,height); 
    tv.setLayoutParams(layoutParamsForText); 

    Bitmap testB; 

    testB = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(testB); 
    tv.layout(0, 0, width, height); 
    tv.draw(c); 

    ImageView view = (ImageView) findViewById(R.id.test_X); 
    view.setLayoutParams(layoutParamsForText); 
    view.setBackgroundColor(Color.WHITE); 
    view.setImageBitmap(testB); 
    view.setMaxHeight(height); 
    view.setMaxWidth(width); 
    // ImageView view = (ImageView) findViewById(R.id.test_X); 

    // view.setLayoutParams(new GridView.LayoutParams(85, 85)); 

    view.setScaleType(ImageView.ScaleType.FIT_CENTER); 

    view.setOnTouchListener(this); 
} 

public boolean onTouch(View v, MotionEvent event) { 

    ImageView view = (ImageView) v; 

    view.setScaleType(ImageView.ScaleType.MATRIX); 

    float scale; 

    // Dump touch event to log 

    dumpEvent(event); 

    // Handle touch events here... 

    switch (event.getAction() & MotionEvent.ACTION_MASK) { 

    case MotionEvent.ACTION_DOWN: // first finger down only 

     savedMatrix.set(matrix); 

     start.set(event.getX(), event.getY()); 

     Log.d(TAG, "mode=DRAG"); 

     mode = DRAG; 

     break; 

    case MotionEvent.ACTION_UP: // first finger lifted 

    case MotionEvent.ACTION_POINTER_UP: // second finger lifted 

     mode = NONE; 

     Log.d(TAG, "mode=NONE"); 

     break; 

    case MotionEvent.ACTION_POINTER_DOWN: // second finger down 

     oldDist = spacing(event); 

     Log.d(TAG, "oldDist=" + oldDist); 

     if (oldDist > 5f) { 

      savedMatrix.set(matrix); 

      midPoint(mid, event); 

      mode = ZOOM; 

      Log.d(TAG, "mode=ZOOM"); 

     } 

     break; 

    case MotionEvent.ACTION_MOVE: 

     if (mode == DRAG) { // movement of first finger 

      matrix.set(savedMatrix); 

      if (view.getLeft() >= -392) { 

       matrix.postTranslate(event.getX() - start.x, event.getY() 
         - start.y); 

      } 

     } 

     else if (mode == ZOOM) { // pinch zooming 

      float newDist = spacing(event); 

      Log.d(TAG, "newDist=" + newDist); 

      if (newDist > 5f) { 

       matrix.set(savedMatrix); 

       scale = newDist/oldDist; /* 
              * thinking i need to play 
              * around with this value to 
              * limit it 
              */ 

       matrix.postScale(scale, scale, mid.x, mid.y); 

      } 

     } 

     break; 

    } 

    // Perform the transformation 

    view.setImageMatrix(matrix); 

    return true; // indicate event was handled 

} 

private float spacing(MotionEvent event) { 

    float x = event.getX(0) - event.getX(1); 

    float y = event.getY(0) - event.getY(1); 

    return FloatMath.sqrt(x * x + y * y); 

} 

private void midPoint(PointF point, MotionEvent event) { 

    float x = event.getX(0) + event.getX(1); 

    float y = event.getY(0) + event.getY(1); 

    point.set(x/2, y/2); 

} 

/** Show an event in the LogCat view, for debugging */ 

private void dumpEvent(MotionEvent event) { 

    String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", 

    "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" }; 

    StringBuilder sb = new StringBuilder(); 

    int action = event.getAction(); 

    int actionCode = action & MotionEvent.ACTION_MASK; 

    sb.append("event ACTION_").append(names[actionCode]); 

    if (actionCode == MotionEvent.ACTION_POINTER_DOWN 

    || actionCode == MotionEvent.ACTION_POINTER_UP) { 

     sb.append("(pid ").append(

     action >> MotionEvent.ACTION_POINTER_ID_SHIFT); 

     sb.append(")"); 

    } 

    sb.append("["); 

    for (int i = 0; i < event.getPointerCount(); i++) { 

     sb.append("#").append(i); 

     sb.append("(pid ").append(event.getPointerId(i)); 

     sb.append(")=").append((int) event.getX(i)); 

     sb.append(",").append((int) event.getY(i)); 

     if (i + 1 < event.getPointerCount()) 

      sb.append(";"); 

    } 

    sb.append("]"); 

    Log.d(TAG, sb.toString()); 

} 
関連する問題