我无法为func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0 :
let cell = tableView.dequeueReusableCell(withIdentifier: "StoriesCell", for: indexPath) as! StoriesCell
// Could use cell.storiesCollectionView.reloadData() too, but it flickers then
UIView.animate(withDuration: 0, animations: {
cell.storiesCollectionView.performBatchUpdates({
cell.storiesCollectionView.reloadSections(IndexSet(0...0))
})
})
cell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)
cell.collectionViewOffset = storedStoriesCollectionViewOffset[indexPath.row] ?? 0
return cell
case 2 :
// ...
设置alpha参数。 XML属性GlSurfaceView
无效,从代码android:alpha=
调用方法也无效。例如,我读过一个类似的问题-如何在此mView.setAlpha()
上设置透明背景,但是不幸的是,解决方案并没有解决我的问题-设置alpha通道View
的包含。我试图将GlSurfaceView
移到GlSurfaceView
内,但尚未设置FrameLayout
的Alpha,但是此解决方案没有帮助。
现在,我仍然只看到一个变体-将示例视图移至FrameLayout
上方并设置示例GlSurfaceView
的透明度。这个解决方案对我来说是最后一个案例!
我想问-有什么方法可以不同地解决这个问题吗?
答案 0 :(得分:0)
问题已解决!
只有一种变体是正确的-在着色器的'gl_FragColor'中设置参数'alpha'!例如:gl_FragColor.a=0.5;
要通过代码访问着色器,需要在着色器中将参数alpha设置为全局('uniform'类型),并通过方法'glGetUniformLocation'将他链接起来em>,'glUniform1f'。例如:
// View-code
int mAlpha;
float alpha = 0.5f;
mAlpha = GLES20.glGetUniformLocation(mProgrammerHandle, "u_alpha");
GLES20.glUniform1f(mAlpha, alpha);
// Shader-code
...
uniform float u_alpha;
...
gl_FragColor = vec4(rgb,u_alpha);
但这还不是全部! 需要设置参数GlSurfaceView和Render。初始化后,应允许GlSurfaceView透明绘制:
setEGLConfigChooser(8, 8, 8, 8, 16, 0);
getHolder().setFormat(PixelFormat.RGBA_8888);
在渲染对象中,也必须设置透明的颜色清洁并纠正颜色混合。
GLES20.glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );
GLES20.glEnable(GL_BLEND);
颜色混合可以不同。默认-颜色混合,即GLES20.glBlendEquation(GL_FUNC_ADD);
-不需要写。
但是还有其他混合选项:
我没有在代码中写出'glBlendEquation'。
下一个重要时刻-Alpha混合。方法'glBlendFunc'或'glBlendFuncSeparate'。您可以在OpenGL教程中阅读更多信息。为了进行正确的Alpha混合,我利用了更详细的设置:
GLES20.glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
最后要做的事情-在GlSurfaceView中覆盖方法'setAlpa'和'getAlpa'。
PS 。如果在“视图”中出现透明的工件,则您可能尝试在XML内设置参数setZOrderOnTop(true);
和/或android:windowIsTranslucent="true"
。但是对我而言,这不是必需的-一切正常!