我必须画一个3dp线来代表一个水平完成在一个测试游戏。
这条线必须有两种颜色。例如,如果用户已经完成了40%的水平,线将是红色的前40%的线,其余60%是灰色的。
我成功地做到了这一点:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="line" >
<size android:height="3dp" android:width="40dp"/>
<stroke
android:width="1dp"
android:color="#FFFC10" />
</shape>
</item>
<item android:left="40dp">
<shape android:shape="line" >
<size android:height="3dp" android:width="60dp" />
<stroke
android:width="1dp"
android:color="#DDDDDD" />
</shape>
</item>
</layer-list>然后我用一个ImageView显示它:
<ImageView
android:id="@+id/row_completion_bar"
android:src="@drawable/completion_bar"
android:layout_width="100dp"
android:layout_height="3dp" />..。但现在,我当然必须能够改变这40%/60%的比例取决于实际用户的完成。
第一个问题:最有效的方法是什么?在运行时更改绘图吗?还是用Java在运行时创建一个新的可绘图?
第二个问题:怎么做?我尝试了两种方法(在java代码中重新创建这个可绘制的xml /在运行时更改xml可绘制),但没有成功:-(
任何帮助都将不胜感激。
发布于 2014-04-08 02:53:38
使用进度条怎么样?可以通过编程或通过xml文件设置完成标记和待办标记的样式。您的代码还将具有更高的可读性和可维护性,因为您将使用正确的小部件来执行任务。您的布局将包括:
<ProgressBar
android:id="@+id/progressBar"
android:layout_height="3dip"
android:layout_width="match_parent"
android:progressDrawable="@drawable/progress_bar" />您可以从代码中更新条形图,例如:
ProgressBar bar = (ProgressBar)findViewById(R.id.progressBar);
bar.setProgress(40);这个示例重写了条形图的样式(按照progressDrawable属性的指示),使用了下面的res/drawable/progress_bar.xml文件内容。这个有额外的好,像渐变阴影和圆角;调整你认为合适的:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="270"
android:centerColor="#ff5a5d5a"
android:centerY="0.5"
android:endColor="#ff747674"
android:startColor="#ff9d9e9d" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="0"
android:endColor="#ff009900"
android:startColor="#ff000099" />
</shape>
</clip>
</item>
</layer-list>归功于http://www.tiemenschut.com/how-to-customize-android-progress-bars/,它提供了更多关于如何定制进度条的详细信息。
https://stackoverflow.com/questions/17950258
复制相似问题