我正在尝试制作一个条形图,每个玩家得分都会增加。每次按下按钮以指示获得积分的人,相对于积分,栏会增加。到目前为止,我已经能够按照我想要的方式设置布局,我只是遇到了以编程方式更新它的问题。这是我的布局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());
此时我已经用了很多时间在视图类中尝试各种方法来更新条的高度,每次尝试都有很多问题。我还没有找到任何可行的方式。感谢您的帮助,谢谢!
答案 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。