ObjectAnimator pixlated TextView
Я сталкиваюсь с проблемой при масштабировании TextViews и Checkboxes в версии GT-N5110 для Android версии 4.1.2
следующее изображение появляется после масштабирования TextView там textview внутри, я хочу его масштабировать, я попытался включить масштабирование анимации в вариантах разработчика без каких-либо изменений, я также попытался использовать файл nineoldandroid.jar.
здесь мой код внутри кармана:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.test, container, false);
linearLayout = (LinearLayout) view.findViewById(R.id.test);
textView = (AutoResizeTextView) view.findViewById(R.id.text);
return view;
}
@Override
public void onStart() {
super.onStart();
ObjectAnimator.ofFloat(linearLayout , "scaleY", 500).setDuration(500).start();
ObjectAnimator.ofFloat(linearLayout , "scaleX", 500).setDuration(500).start();
}
расположение:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/test"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:background="@drawable/prayer_background">
<com.example.views.AutoResizeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/aboutUs"
android:textSize="5sp" />
</LinearLayout>
</LinearLayout>
prayer_background:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="10dip" />
<stroke
android:width="5dip"
android:color="@color/mainColor" />
<solid android:color="@color/mainColor" />
</shape>
Update:
Я попробовал AutoResizeText и ScaleableTextView, упомянутый здесь:
Я получаю следующий результат:
Ответы
Ответ 1
private int dp2px(float dp){
return (int) (dp * activity.getResources().getDisplayMetrics().density + 0.5f);
}
private doScale(){
final LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.test);
final TextView textView = (TextView) linearLayout.findViewById(R.id.tv_main);
final int oldSize = dp2px(30);
final float scale = 2f;
final float textSizeOld = textView.getTextSize();
ValueAnimator valueAnimatorLarge = ValueAnimator.ofInt(1,100 );
valueAnimatorLarge.setDuration(500);
valueAnimatorLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
ViewGroup.LayoutParams layoutParams = linearLayout.getLayoutParams();
float currentScale = (int)animation.getAnimatedValue()/100f;
layoutParams.width = (int) (scale*oldSize*currentScale);
layoutParams.height = layoutParams.width;
linearLayout.setLayoutParams(layoutParams);
textView.setTextSize(scale*textSizeOld*currentScale);
}
});
valueAnimatorLarge.start();
}