我正在使用带有两个片段的活动。片段#1是登录屏幕。一旦用户登录活动,就会通过片段事务更改片段。第二个片段#2包含circularSeekBar。两个片段都使用xml布局。该活动具有带有FrameLayout(R.id.fragmentContainer)的xml布局。问题是circularSeekBar没有更新它的显示而没有绘制圆圈。 (它只显示小旋钮图像)如果我首先显示circularSeekBar片段而没有登录,它确实有效。如果显示第二个(替换),则只会出现此问题。我尝试过使用circularSeekBar.invalidate()但没有帮助。不知道在哪里打电话或尝试什么。我尝试在Fragment的onResume()&中使用invalidate()。 void onStart()没有运气。我正在onCreateView中引用circularSeekBar。 (正常的东西)。我注意到的另一件事是,如果我尝试触摸它,它将开始工作。 (旋钮。所以它可以刷新一些)
这是我在onCreateView(...)
中引用它的地方circularSeekBar = (CircularSeekBar)v.findViewById(R.id.circularSeekBar_circular_seek_bar);
circularSeekBar.setSeekBarChangeListener(new OnSeekChangeListener()
{
@Override
public void onProgressChange(CircularSeekBar view, int newProgress)
{
float value = translateValueFromSourceIntervalToDestinationInterval(
(float)newProgress,
(float)0.0,
(float)100.0,
(float)65.0,
(float)85.0
);
setpointValue.setText(""+(int)value);
updateLeafImage((int)value);
}
});
circularSeekBar.setProgress(50);
circularSeekBar.invalidate();
这是我在Activity中替换它的地方:
FragmentManager fm = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if(fragment != null)
{
((LoginFragment) fragment).setDelegate(null);
}
Fragment cirFragment = new cirFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer,cirFragment);
// Commit the transaction
transaction.commit();
答案 0 :(得分:1)
好的,我找到了解决方案:
在protected void onMeasure中(int widthMeasureSpec,int heightMeasureSpec) 他们通过getWidth()和getHeight()获得宽度和高度。
我将其更改为:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = View.MeasureSpec.getSize(widthMeasureSpec);
height = View.MeasureSpec.getSize(heightMeasureSpec);
这纠正了这个问题。