如何为可绘制的条形图设置动画看起来像它的增长?

时间:2014-11-20 02:44:22

标签: java android xml animation layout

我正在尝试制作一个条形图,每个玩家得分都会增加。每次按下按钮以指示获得积分的人,相对于积分,栏会增加。到目前为止,我已经能够按照我想要的方式设置布局,我只是遇到了以编程方式更新它的问题。这是我的布局XML。它有很多嵌套布局,因此它适用于各种各样的屏幕。

<?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:background="@drawable/background"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_margin="6dp"
            android:scaleType="fitCenter"
            android:src="@drawable/letterbutton" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center">

            <TextView
                android:id="@+id/letterButton"
                android:layout_width="wrap_content"
                android:layout_height="130dp"
                android:gravity="center"
                android:text="A"
                android:textSize="115dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/nextScore"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="5 Pts"
                android:textSize="25dp"
                android:textStyle="bold" />

        </LinearLayout>

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginBottom="6dp"
        android:layout_weight="1.5"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="top"
            android:orientation="horizontal">

            <LinearLayout
                android:id="@+id/layout1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="bottom"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/Score1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="0 Pts"
                    android:textColor="@color/grey"
                    android:textSize="20dp"
                    android:textStyle="bold" />

                <ImageView
                    android:id="@+id/scoreBar1"
                    android:layout_width="match_parent"
                    android:layout_height="5dp"
                    android:layout_margin="6dp"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/layout1_bg" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="bottom"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/Score2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="0 Pts"
                    android:textColor="@color/grey"
                    android:textSize="20dp"
                    android:textStyle="bold" />

                <ImageView
                    android:id="@+id/scoreBar2"
                    android:layout_width="match_parent"
                    android:layout_height="5dp"
                    android:layout_margin="6dp"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/layout2_bg" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout3"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="bottom"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/Score3"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="0 Pts"
                    android:textColor="@color/grey"
                    android:textSize="20dp"
                    android:textStyle="bold" />

                <ImageView
                    android:id="@+id/scoreBar3"
                    android:layout_width="match_parent"
                    android:layout_height="5dp"
                    android:layout_margin="6dp"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/layout3_bg" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout4"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="bottom"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/Score4"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="0 Pts"
                    android:textColor="@color/grey"
                    android:textSize="20dp"
                    android:textStyle="bold" />

                <ImageView
                    android:id="@+id/scoreBar4"
                    android:layout_width="match_parent"
                    android:layout_height="5dp"
                    android:layout_margin="6dp"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/layout4_bg" />

            </LinearLayout>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/button1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="updateInfo"
                android:layout_margin="3dp"
                android:text="Button"
                android:background="@drawable/custombutton1"/>

            <Button
                android:id="@+id/button2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="updateInfo"
                android:layout_margin="3dp"
                android:text="Button"
                android:background="@drawable/custombutton2"/>

            <Button
                android:id="@+id/button3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="3dp"
                android:layout_weight="1"
                android:onClick="updateInfo"
                android:text="Button"
                android:background="@drawable/custombutton3"/>

            <Button
                android:id="@+id/button4"
                android:layout_width="0dp"
                android:layout_margin="3dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="updateInfo"
                android:text="Button"
                android:background="@drawable/custombutton4"/>


        </LinearLayout>

    </LinearLayout>
</LinearLayout>

这里是代码处理按钮,我会把代码调整大小/动画“大小”增长的条形码。

public void updateInfo(View v){

        if (AlphaButton.getPosition() < 26) {
            if (v.getId() == R.id.button1){
                TextView mytextview1 = (TextView) findViewById(R.id.Score1);
                mytextview1.setText(AlphaButton.addScore(1) + " Pts");
                TextView mytextview2 = (TextView) findViewById(R.id.nextScore);
                mytextview2.setText(Integer.toString(AlphaButton.getPoints()) + " Pts");
                ImageView rotatebtn = (ImageView) findViewById(R.id.imageView1);
                rotatebtn.setRotation(angle);
                angle += 13.846;
            }else if (v.getId() == R.id.button2){
                TextView mytextview1 = (TextView) findViewById(R.id.Score2);
                mytextview1.setText(AlphaButton.addScore(2) + " Pts");
                TextView mytextview2 = (TextView) findViewById(R.id.nextScore);
                mytextview2.setText(Integer.toString(AlphaButton.getPoints()) + " Pts");
                ImageView rotatebtn = (ImageView) findViewById(R.id.imageView1);
                rotatebtn.setRotation(angle);
                angle += 13.846;
            }else if (v.getId() == R.id.button3){
                TextView mytextview1 = (TextView) findViewById(R.id.Score3);
                mytextview1.setText(AlphaButton.addScore(3) + " Pts");
                TextView mytextview2 = (TextView) findViewById(R.id.nextScore);
                mytextview2.setText(Integer.toString(AlphaButton.getPoints()) + " Pts");
                ImageView rotatebtn = (ImageView) findViewById(R.id.imageView1);
                rotatebtn.setRotation(angle);
                angle += 13.846;
            }else if (v.getId() == R.id.button4){
                TextView mytextview1 = (TextView) findViewById(R.id.Score4);
                mytextview1.setText(AlphaButton.addScore(4) + " Pts");
                TextView mytextview2 = (TextView) findViewById(R.id.nextScore);
                mytextview2.setText(Integer.toString(AlphaButton.getPoints()) + " Pts");
                ImageView rotatebtn = (ImageView) findViewById(R.id.imageView1);
                rotatebtn.setRotation(angle);
                angle += 13.846;
            }
            TextView myTextView = (TextView) findViewById(R.id.letterButton);
            myTextView.setText(AlphaButton.getString());

此时我已经用了很多时间在视图类中尝试各种方法来更新条的高度,每次尝试都有很多问题。我还没有找到任何可行的方式。感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

首先,使用多个加权嵌套LinearaLayout并不是一个好主意。这可能导致表现不佳。加权布局需要测量两次,因此当您嵌套时,测量次数会呈指数级增长。

就改变酒吧的大小而言,这取决于。如果您只想更改大小,可以更改视图的LayoutParams。

另一种选择是使用ScaleAnimation。

 ScaleAnimation animation = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, (float) 0.5,    Animation.RELATIVE_TO_SELF, (float) 0.5);
 animation.setDuration(ANIMATION_DURATION);
 animation.setFillAfter(true);
 myView.startAnimation(animation);

缩放动画的前4个参数是x和y的起始和结束浮点值,1f表示当前大小的100%。

如果你走这条路,我会建议你阅读setFillAfter()的内容,它可以帮你省去路上的麻烦。例如https://stackoverflow.com/a/5888969/3430469