我注意到当使用与FragmentPagerAdapter当前片段不相邻的片段时,它们的视图被破坏(并且它们onPause()和onStop()方法被调用,奇怪的onSaveInstanceState(Bundle)是没有被调用),并且onCreateView正在为这些片段再次调用它们.我的问题是我有一些Timer在这些片段上运行,并且重新创建它们是不可行的,因为这些定时器应该触发并更新相关的片段UI.对于大屏幕,我使用HorizontalScrollViewa LinearLayout和它完美无缺.
我的活动中的相关代码:
private class MyPagerAdapter extends FragmentPagerAdapter implements TitleProvider {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return mAddNewScenesFragment;
} else if (position == 1) {
return mGlobalEventsFragment;
} else {
return mSceneFragments.get(position - 2);
}
}
@Override
public int getCount() {
return mSceneFragments.size() + 2;
}
@Override
public String getTitle(int position) {
if …Run Code Online (Sandbox Code Playgroud) 我有以下场景:一个用作背景的位图和另一个用作叠加的位图,可以是50%透明或不透明(在运行时可更改)和第三个包含第二个位图掩码的位图.我尝试了不同的Xfermodes配置和绘图订单,但无法找到合适的配置.
我使用掩码作为位图,因为我需要能够在两次运行程序之间或配置更改之间保存它.它是在用户在屏幕上绘制时创建的,有效地清除了战争迷雾.
最佳尝试的代码片段.只有我希望它不起作用的是我的面具的透明度.
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mFogOfWar, mTransformationMatrix, mPaintFog);
canvas.drawBitmap(mMaskBitmap, mTransformationMatrix, mPaintMask);
canvas.drawBitmap(mImage, mTransformationMatrix, mPaintImage);
}
Run Code Online (Sandbox Code Playgroud)
Paint 对象:
mPaintImage.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
mPaintFog.setAlpha(127);
mPaintMask.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
Run Code Online (Sandbox Code Playgroud)
这是我对当前配置更清楚的结果:

我不确定我是否能够在Paint对象上设置alpha; 如果没有,我不介意另一个关于alpha问题的建议或解决方案,最好是不需要重新创建用作战争迷雾的位图.
编辑:
通过执行以下操作,我能够获得我想要的结果:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mImage, mTransformationMatrix, mPaintImage);
if (mMaskBitmap != null) {
canvas.drawBitmap(mFogOfWar, mTransformationMatrix, mPaintFog);
canvas.drawBitmap(mMaskBitmap, mTransformationMatrix, mPaintMask);
canvas.drawBitmap(mMaskBitmap, mTransformationMatrix, mPaintImage);
canvas.drawBitmap(mImage, mTransformationMatrix, mPaintImageSecondPass);
}
Run Code Online (Sandbox Code Playgroud)
Paint 对象:
mPaintImage = new Paint(); // No Xfermode here anymore
mPaintFog.setAlpha(127);
mPaintMask.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
mPaintImageSecondPass.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN)); …Run Code Online (Sandbox Code Playgroud) 说我有两个表,Parent并Child和他们两个都称为一个字段name,如果我这样做:
Parent.join(:child).group(:name)
我会收到一个错误,说明该领域存在歧义name.我可以做以下事情
Parent.join(:child).group('parents.name')
要解决它,但我更愿意使用符号,如果可能的话.那么,是吗?
我有一个SeekBar内部HorizontalScrollView,我发现很难抓住手柄并移动它.如果我没有完全触摸手柄,HorizontalScrollView则会接收并消耗触摸事件.有没有办法增加优先级,SeekBar所以它将有触摸事件的正常"范围"或这只是一个坏主意/设计,我应该避免它?