ObjectAnimator 像素化 TextView

Posted

技术标签:

【中文标题】ObjectAnimator 像素化 TextView【英文标题】:ObjectAnimator pixlated TextView 【发布时间】:2016-07-15 21:29:53 【问题描述】:

在三星 GT-N5110 android 版本 4.1.2 中放大 TextViews 和 Checkboxes 时遇到问题 放大 TextView 后出现下图,里面有 textview 我想放大它我确实尝试在开发人员选项中启用缩放动画但没有用我也尝试过 Nineoldandroid.jar。

这是我在fargment中的代码:

@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_
        android:layout_
        android:orientation="vertical">


        <LinearLayout
            android:id="@+id/test"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:background="@drawable/prayer_background">

            <com.example.views.AutoResizeTextView
                android:layout_
                android:layout_
                android:layout_gravity="center"
                android:text="@string/aboutUs"
                android:textSize="5sp" />

        </LinearLayout>
    </LinearLayout>

祷告背景:

<?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:
            android:color="@color/mainColor" />
        <solid android:color="@color/mainColor" />
    </shape>

更新:

我确实尝试过提到 here 的 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();
        

【讨论】:

float currentScale = (int)animation.getAnimatedValue()/100f;将异常从 float 转换为 int

以上是关于ObjectAnimator 像素化 TextView的主要内容,如果未能解决你的问题,请参考以下文章

Android ObjectAnimator 与 ViewPropertyAnimator

属性动画之ObjectAnimator

恒速的Android ObjectAnimator

ObjectAnimator 重复循环延迟

ObjectAnimator ValueAnimator AnimatorSet基础

objectanimator和valueanimator有啥区别