【问题标题】:How to center a circular progress bar after rotating it with an animation in Android?在Android中使用动画旋转圆形进度条后如何居中?
【发布时间】:2015-09-18 21:21:57
【问题描述】:

在旋转动画之前它很棒,但我不喜欢圆圈开始的地方,我得到了这个:

http://s3.postimg.org/ptnap4h8h/cnocorrido.png

应用旋转动画后,我得到了这个:

我有一个圆形进度条,我必须旋转它才能让它从底部开始并在底部结束

圆形进度条:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@android:id/progress">
        <shape
            android:innerRadiusRatio="3"
            android:shape="ring"
            android:thicknessRatio="7.0"
            android:useLevel="true">
            <gradient
                android:startColor="#fb0000"
                android:endColor="#00FF00"
                android:centerColor="#fbf400"
                android:type="sweep" />
        </shape>
    </item>
</layer-list>

它在圆圈中间有一个文本视图(answerCountdown),显示剩余秒数。效果很好。

layout.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal">

    <ProgressBar
        android:id="@+id/barTimer"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="120dp"
        android:layout_height="131dp"
        android:indeterminate="false"
        android:indeterminateOnly="false"
        android:max="100"
        android:progressDrawable="@drawable/circular_progress_bar"
        android:layout_gravity="center_horizontal"
        android:layout_below="@+id/gameCountDown"
        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:layout_alignWithParentIfMissing="false"
        android:layout_alignParentRight="false"
        android:layout_alignParentBottom="false"
        android:layout_alignParentLeft="false"
        android:layout_alignParentTop="false"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/answerCountdown"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="47dp"
        android:layout_below="@+id/gameCountDown"
        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:layout_alignWithParentIfMissing="false"
        android:layout_alignParentRight="false"
        android:layout_alignParentBottom="false"
        android:layout_alignParentLeft="false"
        android:layout_alignParentTop="false"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

但是我应用旋转动画后它没有居中,它会根据你旋转它的角度向左或向右移动,倒计时计时器上的代码

 Animation an = new RotateAnimation(0.0f, 90.0f, 250f, 273f);
    an.setFillAfter(true);
    barTimer.startAnimation(an);

textView 已经完美居中,有没有办法“旋转后居中”而不必在布局上输入边距值?....我现在只想用一个布局文件来解决它... .....

【问题讨论】:

  • 您是否将轴心点设置在圆心?
  • 我该怎么做?这有助于在手机屏幕和平板电脑屏幕中看到它吗?.....所有与进度条相关的代码都已发布

标签: java android layout progress-bar


【解决方案1】:

我相信你的构造函数已经关闭:

Animation an = new RotateAnimation(0.0f, 90.0f, 250f, 273f);

第 3 和第 4 个参数代表旋转轴心点,应该更像下面的样子

Animation an = new RotateAnimation(0.0f, 90.0f, .5f, .5f);

上面的意思是:在图像的 50% 处以 X 和 Y 轴心点从 0 度旋转到 90 度。

来源:Android Documentation: RotateAnimation(float, float, float, float)

【讨论】:

  • 我尝试了你的建议,我只是像你一样改变了最后的值,但圆圈仍然没有包裹数字......这是结果s14.postimg.org/u1ujxodsh/Sin_t_tulo.png
  • 尝试不同的值后,我能够解决它。你的回答是对的,我的朋友。我的动画代码中只是缺少一些东西,所有其他代码都按照发布的方式保留,不同之处在于,我添加了行 barTimer.setAnimation(an);,我忘记设置最终的 RotateAnimation an =新的 RotateAnimation(0.0f, 90.0f, RotateAnimation.RELATIVE_TO_SELF, .5f, RotateAnimation.RELATIVE_TO_SELF, .5f); an.setDuration(0); an.setFillAfter(true); barTimer.setAnimation(an); barTimer.startAnimation(an);
  • 这是最终结果,我将其留给尝试完成相同操作的用户以供将来帮助s27.postimg.org/c5h71dvtf/finalresult.png
【解决方案2】:

试试这个

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="@android:color/holo_blue_bright">

    <ProgressBar
        android:id="@+id/barTimer"
        android:progressDrawable="@drawable/circular_progress_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="120dp"
        android:layout_height="131dp"
        android:layout_gravity="center"
        android:indeterminate="false"
        android:indeterminateOnly="false"
        android:max="100"
        />

    <TextView
        android:id="@+id/answerCountdown"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="jfi"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</FrameLayout>

【讨论】:

  • 无论如何,谢谢,我已经用 Tambykojak 回答解决了!检查回复以查看解决方案!我错过了将动画分配给进度条
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多