有没有人知道如何使视图反转,我有一个水平的ProgressBar,我希望它从右到左而不是从左到右
答案 0 :(得分:59)
这更容易。您可以简单地调用以下方法,然后旋转它并按照您想要的方式工作。
progressBar.setRotation(180);
一个例子:
答案 1 :(得分:18)
您可以使用scaleX或scaleY属性
在xml中翻转视图 <ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="-1"/>
答案 2 :(得分:16)
创建常规进度条视图的子类并实现onDraw方法以在绘制之前旋转画布:
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.rotate(180,<CenterX>,<CenterY>);
super.onDraw(canvas);
canvas.restore();
}
这应该可以解决问题。
答案 3 :(得分:14)
public class inverseSeekBar extends ProgressBar {
public inverseSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public inverseSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public inverseSeekBar(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected synchronized void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.save();
//now we change the matrix
//We need to rotate around the center of our text
//Otherwise it rotates around the origin, and that's bad.
float py = this.getHeight()/2.0f;
float px = this.getWidth()/2.0f;
canvas.rotate(180, px, py);
//draw the text with the matrix applied.
super.onDraw(canvas);
//restore the old matrix.
canvas.restore();
}}
<com.hlidskialf.android.widget.inverseSeekBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:max="100"
android:progress="50"
android:secondaryProgress="75"
/>
mypackage:com.test.testProgressBar
答案 4 :(得分:8)
您无需旋转整个View
。
只需在my_progress_drawable.xml
中使用a single xml attribute:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@android:id/background"
android:drawable="@drawable/my_background"/>
<item android:id="@android:id/progress">
<clip
android:drawable="@drawable/my_right_to_left_progress"
android:gravity="right" /> <!-- Clip the image from the RIGHT -->
</item>
</layer-list>
The documentation告诉我们gravity="right"
执行此操作:
将对象放在容器的右边缘,而不是更改其大小。当clipOrientation为“水平”时,剪裁发生在drawable的左侧。
不要覆盖onDraw()
。这种实现在不同版本的Android中更加稳定。
不幸的是,在不调用constructor的情况下,无法以编程方式设置ClipDrawable
的严重性。
答案 5 :(得分:6)
如果你想在XML中使用它,你可以使用两个属性。
如果你想使用android:layoutDirection="rtl"
,它需要最低限度的API 17,但是如果你使用android:rotation="180"
则没有API限制
<ProgressBar
android:progress="20"
android:rotation="180"
style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
答案 6 :(得分:2)
我是懒惰我只是将这两行添加到<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
xml:
seekbar
这有什么缺点吗?
答案 7 :(得分:2)
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:layout_margin="8dp"
android:layoutDirection="rtl"
android:progress="80" />