将一段iOS代码转换为Android

将一段iOS代码转换为Android,android,objective-c,android-animation,porting,Android,Objective C,Android Animation,Porting,我认为从标题来看,这个问题有点令人困惑,会吸引很多人(-),但你会发现它非常有趣 我已经为iOS编写了一个很好的应用程序,我们想和一个朋友一起把它移植到安卓系统中。除了一段代码,一切都正常 在我的iOS应用程序中,当UIWebview加载时,我会显示一个UIView,并设置动画。当UIWebview加载完成时,我会将其隐藏。 我用animateWithDuration函数制作的动画。 我们到了: UIView: @property (nonatomic,retain) IBOutlet UIVi

我认为从标题来看,这个问题有点令人困惑,会吸引很多人(-),但你会发现它非常有趣

我已经为iOS编写了一个很好的应用程序,我们想和一个朋友一起把它移植到安卓系统中。除了一段代码,一切都正常

在我的iOS应用程序中,当UIWebview加载时,我会显示一个UIView,并设置动画。当UIWebview加载完成时,我会将其隐藏。 我用
animateWithDuration
函数制作的动画。 我们到了:

UIView:

@property (nonatomic,retain) IBOutlet UIView *animationLayer;
_animationLayer.hidden=YES;
- (void) webViewDidStartLoad:(UIWebView *)webView {
[UIView animateWithDuration:7.0
                      delay:0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{ _animationLayer.backgroundColor=[UIColor colorWithRed:(arc4random() % 255)/255.0 green:(arc4random() % 255)/255.0 blue:(arc4random() % 255)/255.0 alpha:1.0f];}
                 completion:nil];
}
在Viewdidload中初始化它

_animationLayer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    _animationLayer.backgroundColor=[UIColor colorWithRed:(arc4random() % 255)/255.0f green:(arc4random() % 255)/255.0f blue:(arc4random() % 255)/255.0f alpha:1.0f];
    _animationLayer.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
加载时显示UIView并开始设置动画:

@property (nonatomic,retain) IBOutlet UIView *animationLayer;
_animationLayer.hidden=YES;
- (void) webViewDidStartLoad:(UIWebView *)webView {
[UIView animateWithDuration:7.0
                      delay:0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{ _animationLayer.backgroundColor=[UIColor colorWithRed:(arc4random() % 255)/255.0 green:(arc4random() % 255)/255.0 blue:(arc4random() % 255)/255.0 alpha:1.0f];}
                 completion:nil];
}
在完成加载时隐藏它

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    _animationLayer.hidden=YES;
}
以下是我认为它可以在安卓系统中实现的方式。 加载时显示自定义进度条,完成后隐藏。progressbar可以在全屏画布中定制,它可以像上面的iOS代码一样改变颜色。但是运气不好!:( 有什么建议或简单的方法吗

谢谢!

你可以试试


ObjC2J是一个开源库工具,可以将Objective-C(Mac OS X)代码转换为PC平台上的Java。

好的,要在进行web调用时在后台为Android制作动画,请使用AsyncTask。它看起来像这样

   private class WebCallOperation extends AsyncTask<String, Void, String>
        {
            private final ProgressDialog dialog = new ProgressDialog(context);

            @Override
            protected String doInBackground(String... params)
            {

                //web call code here

                //response returned here
                return "";
            }

            @SuppressWarnings("rawtypes")
            @Override
            protected void onPostExecute(String result)
            {
                if (this.dialog.isShowing())
                {
                    this.dialog.dismiss();
                }
            }

            @Override


protected void onPreExecute()
        {
            this.dialog.setMessage("Loading");
            this.dialog.show();
        }
    }
 WebCall *webCall = [[WebCall alloc] init];


    [webCall setWebCallDidFinish:^(NSString *str){

        //This method is called as as soon as the web call is finished
        NSLog(@"%@", str);
    }];


    //Make web call here
    [webCall webServiceCall:@"http://www.bbc.co.uk/" :nil :nil];

请参阅setWebCallDidFinish方法,它将在webcall完成之前不会被调用。因此,如果您需要在web调用完成后立即执行一些代码,例如停止动画,请在该方法中调用它。希望对您有所帮助。

尝试类似的方法会容易得多。它使用clang并将所有objective-c编译为Android的本机ARM代码。你所做的一切都会在Android上的SDK上开箱即用。

“但是运气不好!”-请详细说明。无法实现进度条的动画。这意味着在每个步骤中更改背景颜色。我在想是否有更好的方法。为什么动画持续时间设置为7秒?您不知道web调用需要多长时间。您是否尝试过使用Androids AsyncTask来设置动画le webcall正在加载将持续时间设置为7秒不会对动画的功能造成任何损害。我的观点是,当您有一个web调用并且希望在后台播放动画时,只要web调用仍在进行中,动画就应该继续。如果将动画设置为7秒并且web调用持续时间更长,则7秒后,动画将在该状态下完成并保持该状态。这是一种不好的做法,因为用户可能会认为应用程序已崩溃。谢谢,我会尝试一下,但首先我会等待其他人提出其他建议。很好的示例,谢谢,我将以这种方式尝试。至于块代码,请随意使用,毕竟堆栈溢出是为了创建我们是一个更好的开发人员。谢谢!很抱歉回复晚了,直到今天早上才离开计算机。我添加了一个自定义的web调用类,用于进行web调用。请参阅我的编辑。希望能有所帮助。如果您对此有任何疑问,请提问。只需在此处添加代码有错误:
If(responseStatusCode<200 | responseStatusCode>300)
如果需要使用逻辑运算符
|
(即使位运算符
|
总是产生相同的结果;),那么代码还需要更多的错误检查,应该提到的是,编码“表单数据集”的实现是非常原始的-并且只适用于ASCII编码的属性和值,也不能有空格和其他“特殊字符”。不幸的是,表单数据集的正确编码过于复杂。哦,我关于运算符的错误,现在可以解决。您可以根据需要添加更多的错误检查,我使用的版本中没有更多的附加内容,但上面的代码只是我保存的模板,仅供参考。至于编码,同意,这可能会非常烦人关于返回的数据,一些特殊字符可能会造成很多麻烦,但是上面的代码应该足以满足大多数基本的请求。W,非常感谢,您提供了大量的资料供阅读和测试/播放。当然,我会尝试一下!