我有一些动态添加到自定义网格的自定义控件。这些控件可以跨越多个列和行(它们的大小都相同)。我想在行和列之间拖放。我可以拖动单个控件,但它们可以不受限制地移动到任何地方。甚至离网。我想这样做,所以它只能在网格内拖动并捕捉到它拖动到的列/行。
有没有什么简单的方法可以做到这一点?
老实说,如果我能得到它结束的当前行/列,那么我需要做的就是将它的列/行设置为它们,这可能会做到,然后只需担心将其保留在网格内。
我正在Haskell中创建一个渲染引擎,并且正在处理基于简单case语句和Maybe数据类型的着色器的使用方式.
我现在有4种不同类型的着色器:
简单的着色器,
Light Shader(Phong),
纹理着色器,
Light + Texture Shader
目前,我为每个人都有单独的着色器文件,但我想介绍其他着色模型.至少有3种不同的着色模型,我甚至没有做过颜色.
所以总共有4个(Flat,Gourad,Phong,没有照明)*2(纹理开/关)*2(颜色开/关)= 16种可能性我不希望每个都有单独的着色器文件他们 它似乎不是一个好的模型.
所以我想用DSL构建它.这个看起来很不错:https://github.com/fiendfan1/Haskell-GLSL-eDSL
有没有人有关于我如何做到这一点的任何提示?我希望能够轻松添加更多可能性,因为每次添加内容时我都必须至少加倍.它变得异常繁琐.
所以我现在就是这样做的:
p <- case (sProgram state) of
(Just sp) -> return sp
Nothing -> case (lighting state) of
(Just _) -> case (texture state) of
(Just _) -> ltShader state
Nothing -> lShader state
Nothing -> case (texture state) of
(Just _) -> tShader state
Nothing -> sShader state
Run Code Online (Sandbox Code Playgroud)
每个着色器函数都设置统一/属性变量和填充.提前谢谢你的帮助!
所以我不确定我想要的是否实际上是一个可变变量,但它与它相似.
我基本上想要这样做:
case thing of
True -> p <- func
False -> p <- otherFunc
return Record {program=p, otherFields=oF}
Run Code Online (Sandbox Code Playgroud)
我有什么方法可以做那样的事情?我已经让我的函数返回一个IO记录,所以尝试将返回放在case语句中,但是我的最后一行需要返回它,但事实并非如此.
我正在创建一个动态表单活动,我得到了如何从db创建表单的说明.活动基本上只是滚动问题列表并查看它们的类型并添加它们.所以这是一个将视图添加为问题的活动.这一切都很好.我试图将响应/问题保留在特定问题类中,这些类只是一个基本问题的子类.
我遇到的问题是当我尝试添加相机"问题"以提示用户拍照时,我无法在视图中获得结果.我在视图中管理了启动活动,并将结果返回到问卷调查活动.活动不知道将其添加到哪个问题,因为它都是动态完成的.因此,我尝试通过问题ID作为相机意图中的额外内容,并在问卷调查活动中接收它,然后滚动查看它添加的问题,如果它是相同的,它会将图片添加到与之关联的问题中.
它添加问题的方式是通过一个视图组,只为每个视图组插入一个部分.
这是启动相机的相关部分(我也试过使用它而没有捆绑).这是BaseQuestion的子类,它只是linearlayout的子类:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Bundle bundle = new Bundle();
bundle.putInt("questionId", getQuestionId());
intent.putExtras(bundle);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), "image.tmp")));
((Activity)getContext()).startActivityForResult(intent, TAKE_PHOTO);
Run Code Online (Sandbox Code Playgroud)
这是处理活动中结果的相关部分.
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
Bitmap image = null;
switch (requestCode)
{
case TAKE_PHOTO:
{
if (resultCode == RESULT_OK)
{
InputStream inputStream = null;
File file = new File(Environment.getExternalStorageDirectory(),
"image.tmp");
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (inputStream == …Run Code Online (Sandbox Code Playgroud)