2016-08-01 6 views
1

는이 코드텍스트 뷰와 규모

TextView.animate().setDuration(0).scaleX(scale).scaleY(scale).start(); 

를 사용합니다. 나는 왜, 그리고 그것을 방지하는 방법을 몰라?

[편집] 내 테스트 코드에 연결

[test_text_scale.xml] 그것은이다 TestTextScale.java

레이아웃 XML 파일
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clipChildren="false" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/tv_test_scale" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:text="Test" /> 

    <Button 
     android:id="@+id/bt_up" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_toEndOf="@+id/bt_down" 
     android:layout_toRightOf="@+id/bt_down" 
     android:text="Up" /> 

    <Button 
     android:id="@+id/bt_down" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:text="Down" /> 

</RelativeLayout> 

[TestTextScale.java]

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 


public class TestTextScale extends AppCompatActivity { 

    // View 
    private TextView mTvTestZoom; 
    private Button mBtUp, mBtDown; 

    // Model 
    private int mCurrentScale = 1; 

    // OnClick listener 
    private View.OnClickListener mOnClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 

       case R.id.bt_up : { 
        upScale(); 
        setText(); 
       } break; 

       case R.id.bt_down : { 
        downScale(); 
        setText(); 
       } break; 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.test_text_scale); 

     initView(); 
     initEvent(); 
    } 

    private void initView() { 

     mTvTestZoom = (TextView) findViewById(R.id.tv_test_scale); 
     mBtUp = (Button) findViewById(R.id.bt_up); 
     mBtDown = (Button) findViewById(R.id.bt_down); 

    } 

    private void initEvent() { 
     mBtDown.setOnClickListener(mOnClickListener); 
     mBtUp.setOnClickListener(mOnClickListener); 
    } 

    private void upScale() { 
     mCurrentScale += 1; 
     mTvTestZoom.animate().setDuration(0).scaleX(mCurrentScale).scaleY(mCurrentScale).start(); 
    } 

    private void downScale() { 
     mCurrentScale -= 1; 
     mTvTestZoom.animate().setDuration(0).scaleX(mCurrentScale).scaleY(mCurrentScale).start(); 
    } 

    private void setText() { 
     mTvTestZoom.setText(mCurrentScale + ""); 
    } 
} 
+1

해당 컨테이너의 레이아웃 범위를 초과합니다. 혹시. – Shaishav

답변

1

이 월 textview가 부모의 레이아웃 범위를 초과하기 때문에 발생합니다. 이를 극복하기 위해 간단히 android:clipChildren="false"을 textview의 바로 위 부모에 대한 xml 설명에 넣습니다. 부모님을 위해서도해야 할 것입니다.

편집 : 이것은 안드로이드 하드웨어 가속 모듈에서 가능한 문제로 인해

E/OpenGLRenderer: Font size too large to fit in cache. width, height = 635, 1028 

: 코드 나 자신을 테스트하면, 나는 텍스트 뷰는 로그 메시지를 다음과 같이 사라진 것을 발견했다. 이를 방지 할 수있는 방법 중 하나는 다음과 같습니다

mTvTestZoom.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

이 잘 작동하고 특정 텍스트 뷰에 대한 하드웨어 가속을 비활성화하기 때문에 텍스트 뷰, 그것은 안티 앨리어싱을 잃을 수, 특정 크기 후에 사라하지만하지 않습니다.

+0

나는 당신의 제안을 시도했으나 효과가 없다. 위의 테스트 코드를 첨부했다. 고맙다. (T- T) –

+0

@toptaps 알았다. – Shaishav