我在这里遇到了一个非常棘手的问题,尝试了所有我能找到的但它仍然无处可去。
我需要这样的东西:
一个progressBar
,其中包含一个包含进度数据的文本,如果该文本不适合,则该文本可以在进度级别之外,但如果匹配,则该文本可以是(获取)。
也是进度百分比的标志,正好在进度水平(真正的问题)。
样品:
https://dl.dropboxusercontent.com/u/7675841/orange.png
如需更多样品,请将“orange.png”更改为“red.png”和“green.png”。
我做了类似这样的事情:http://blog.mediarain.com/2011/04/android-custom-progressbar-with-rounded-corners/
为TextView
中的文字添加progressBar
:
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<RelativeLayout
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp" >
<ImageView
android:id="@+id/track_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/app_name"
android:minHeight="25dp" />
<ImageView
android:id="@+id/progress_drawable_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:contentDescription="@string/app_name"
android:minHeight="25dp" />
<TextView
android:id="@+id/progress_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="#FFF"
android:textSize="14sp"
android:textStyle="bold" />
</RelativeLayout>
为了设置文本输入/输出我做了这个:
double percent = (double) value / (double) max;
int level = (int) Math.floor(percent * 10000);
drawable.setLevel(level);
double pixelLevel = percent * progressDrawableImageView.getWidth();
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) txt
.getLayoutParams();
if (pixelLevel - 20 < bounds.width()) {
params.leftMargin = (int) pixelLevel + 20;
} else {
params.leftMargin = (int) pixelLevel - bounds.width() - 10;
}
txt.setLayoutParams(params);
这很漂亮,但是对于百分比标志不起作用。或者至少不适用于所有屏幕尺寸和密度。
proyect:“相同的dropbox链接”/RoundedProgressSampleCustom.zip
谢谢你的帮助。
PS:抱歉,不能发布超过2个链接:c
答案 0 :(得分:0)
潜在问题1
确定您的实际问题非常困难。我假设你的百分比标志并非位于所有屏幕的正确位置。我注意到您在XML中使用DP进行测量,但是PX用于调整代码中的参数。
尝试使用DP进行代码测量(例如20和像素级别)。您可以使用以下
int valueInDP= (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, YOURVALUE, getResources().getDisplayMetrics());
YOURVALUE 是您希望转换为DP的值。
潜在问题2
如果您根本没有看到任何内容,那么您的问题就在于此行
progressDrawableImageView.getWidth();
因为在onCreate()中获取imageView宽度似乎存在问题。这可能与您无关,也可能与您无关,但很难说。请参阅此链接以获取解决方法:How to get the width and height of an Image View in android?
如果定位不是问题,则必须将问题编辑为更具体。