2017-07-28 91 views
2

我想實現捏縮放TextView。如果我將內容的寬度和高度保留爲包裝內容,縮放和滾動效果會很好,即當我在TextView外部進行縮放時縮放工作,但如果在TextView中完成則無法工作。縮放不工作,如果我試圖夾在文本視圖

我想在TextView中做到這一點。即當寬度和高度設置爲與父項匹配時。

這裏是我的代碼:

活動代碼:

public class sukharta extends Activity { 

TextView scaleGesture; 
RelativeLayout relative; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sukharta); 
    scaleGesture = (TextView) findViewById(R.id.article); 
    scaleGesture.setText(R.string.twentyfive); 
    relative = (RelativeLayout) findViewById(R.id.sv) ; 

    // ******Set gesture on your TextView****** 
    relative.setOnTouchListener(new simpleOnScaleGestureListener(this)); 

} 


public class simpleOnScaleGestureListener implements View.OnTouchListener, 
     ScaleGestureDetector.OnScaleGestureListener { 

    private ScaleGestureDetector relative; 

    public simpleOnScaleGestureListener(Context context) { 
     relative = new ScaleGestureDetector(context, this); 
    } 

    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     // TODO Auto-generated method stub 

     relative = detector; 

     float size = scaleGesture.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)); 
     scaleGesture.setTextSize(TypedValue.COMPLEX_UNIT_PX, product); 

     size = scaleGesture.getTextSize(); 
     Log.d("TextSizeEnd", String.valueOf(size)); 
     return true; 
    } 

    @Override 
    public boolean onScaleBegin(ScaleGestureDetector detector) { 
     return true; 
    } 

    @Override 
    public void onScaleEnd(ScaleGestureDetector detector) { 

    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     relative.onTouchEvent(event); 
     return true; 
    } 
} 
} 

XML代碼:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/sv"> 

      <TextView 
       android:id="@+id/article" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 
    </RelativeLayout> 

</ScrollView> 

回答

0

你需要修改你的姿態,現在你TextView被抓完整的可用空間。所以你必須在TextView上設置手勢。

public class sukharta extends Activity { 

    TextView scaleGesture; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.content_main); 
     scaleGesture = (TextView) findViewById(R.id.article); 
     scaleGesture.setText("25"); 
     scaleGesture.setMovementMethod(new ScrollingMovementMethod()); 

     // ******Set gesture on your TextView****** 
     scaleGesture.setOnTouchListener(new simpleOnScaleGestureListener(this)); 

    } 


    public class simpleOnScaleGestureListener implements View.OnTouchListener, 
      ScaleGestureDetector.OnScaleGestureListener { 

     private ScaleGestureDetector gestureScale; 

     public simpleOnScaleGestureListener(Context context) { 
      gestureScale = new ScaleGestureDetector(context, this); 
     } 

     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 
      // TODO Auto-generated method stub 

      gestureScale = detector; 

      float size = scaleGesture.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)); 
      scaleGesture.setTextSize(TypedValue.COMPLEX_UNIT_PX, product); 

      size = scaleGesture.getTextSize(); 
      Log.d("TextSizeEnd", String.valueOf(size)); 
      return true; 
     } 

     @Override 
     public boolean onScaleBegin(ScaleGestureDetector detector) { 
      return true; 
     } 

     @Override 
     public void onScaleEnd(ScaleGestureDetector detector) { 

     } 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      gestureScale.onTouchEvent(event); 
      return true; 
     } 
    } 

} 

注 - 小建議,從大寫字母開始您的班級名稱,儘量避免內部類,並專注於單一責任類的設計。

+0

感謝您的回覆。這樣做解決了querry,但現在滾動不起作用。 @Rahul – Devk

+0

我很感激它適合你,你可以接受答案,如果它適合你 – Rahul

+0

但現在滾動不起作用 – Devk