小编Beo*_*son的帖子

FragmentPagerAdapter - 避免重新创建片段的视图

我注意到当使用与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)

android android-fragments

5
推荐指数
2
解决办法
5128
查看次数

如何为透明覆盖创建蒙版?

我有以下场景:一个用作背景的位图和另一个用作叠加的位图,可以是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)

android porter-duff

5
推荐指数
1
解决办法
8462
查看次数

Rails:使用符号解决组的歧义

说我有两个表,ParentChild和他们两个都称为一个字段name,如果我这样做:

Parent.join(:child).group(:name)

我会收到一个错误,说明该领域存在歧义name.我可以做以下事情

Parent.join(:child).group('parents.name')

要解决它,但我更愿意使用符号,如果可能的话.那么,是吗?

ruby-on-rails

5
推荐指数
1
解决办法
853
查看次数

提高SeekBar的触控优先级

我有一个SeekBar内部HorizontalScrollView,我发现很难抓住手柄并移动它.如果我没有完全触摸手柄,HorizontalScrollView则会接收并消耗触摸事件.有没有办法增加优先级,SeekBar所以它将有触摸事件的正常"范围"或这只是一个坏主意/设计,我应该避免它?

android seekbar touch-event

1
推荐指数
1
解决办法
2194
查看次数