2016-05-24 24 views
0

指がテキストビューの周りにあるときにテキストビューをズームイン/ズームアウトすることができますが、ズームインするときに問題がありますまたは両方の指をテキストビューに保持している間は機能しません。テキストビューを保持しながらテキストビューを拡大/縮小する

これは

public class MainActivity extends AppCompatActivity { 

    TextView tv; 
    EditText et; 
    Button ok; 
    float dX, dY; 


    ScaleGestureDetector scaleGestureDetector; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     tv = (TextView) findViewById(R.id.tvtoshow); 
     tv.setVisibility(View.INVISIBLE); 
     ok = (Button) findViewById(R.id.btnok); 



     et = (EditText) findViewById(R.id.ettext); 
     String abc = et.getText().toString(); 

     ok.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       try { 
        InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
       } catch (Exception e) { 
        // TODO: handle exception 
       } 

       String abc = et.getText().toString(); 
       et.setVisibility(View.INVISIBLE); 
       ok.setVisibility(View.INVISIBLE); 
       tv.setText(abc); 

       tv.setVisibility(View.VISIBLE); 
       tv.setRotation(progress); 
      } 
     }); 
     tv.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 

       if(motionEvent.getAction()== MotionEvent.ACTION_MOVE) 
       { 
//     view.setX(motionEvent.getRawX() - view.getWidth()); 
//     view.setY(motionEvent.getRawY() - view.getHeight()); 




         view.animate() 
           .x(motionEvent.getRawX() + dX) 
           .y(motionEvent.getRawY() + dY) 
           .setDuration(0) 
           .start(); 






       } 
       else if (motionEvent.getAction()== MotionEvent.ACTION_DOWN) 
       { 



        dX = view.getX() - motionEvent.getRawX(); 
        dY = view.getY() - motionEvent.getRawY(); 


       } 
       else if (motionEvent.getAction() == MotionEvent.ACTION_UP) 
       { 


        return true; 
       } 



       return true; 
      } 

     }); 

     scaleGestureDetector = new ScaleGestureDetector(this, new simpleOnScaleGestureListener()); 




     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     // TODO Auto-generated method stub 
       scaleGestureDetector.onTouchEvent(event); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public class simpleOnScaleGestureListener extends 
      ScaleGestureDetector.SimpleOnScaleGestureListener { 

     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 

      // TODO Auto-generated method stub 
      float size = tv.getTextSize(); 
      Log.d("TextSizeStart", String.valueOf(size)); 

      float factor = detector.getScaleFactor(); 
      Log.d("Factor", String.valueOf(factor)); 


      float product = size*factor; 
      Log.d("TextSize", String.valueOf(product)); 
      tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, product); 

      size = tv.getTextSize(); 
      Log.d("TextSizeEnd", String.valueOf(size)); 


      return true; 
     } 
    } 
} 

答えて

0

私はあなたがこの

ようにそれを行うことができますタッチ の活動をオーバーライドするのではなく、考えて、私はイン/アウトズームを実行すると、実行時に画面上のTextViewを動かしています、私の活動です
 tv.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      event.setLocation(event.getRawX(), event.getRawY()); 
      scaleGestureDetector.onTouchEvent(event); 

      return true; 
     } 
    });' 

上記を使用すると、テキストビュー内でズームが有効になります。 テキストビューの外側のタッチに対してsetOnTouchテキストビューの親に対するリスナーを行い、上記のように処理します。

関連する問題