精华内容
下载资源
问答
  • 深大图书馆APP 指导老师 第一PPT模板网- 成员 功能特点 开发进度 深大图书馆APP SZU Library IOS平台: ...论文收藏 自习室座位查询 这些是图书馆必要东西吸引用户 图书馆通知 化 功能 摇一摇 读后评论 这些是APP需要
  • 我在这里就不过多提及主流动画APP如Animation Desk或者Procreate之类了,主要想和大家分享一些小众的动画软件。Loom在ipad上绘制gif很多时候是为了绘制循环动画,但是很多软件在首尾帧相连这一点上得并不到位。...

    5ac517b41d5683ff5e23a1fe3aeff443.png

    作者/立夏

    编辑/彼方

    大家好,我是立夏。大概在两年前吧我为大家写过几款动画APP的评测,这一次我也想给大家推荐一些我的新宠,供大家参考。

    我在这里就不过多提及主流动画APP如Animation Desk或者Procreate之类的了,主要想和大家分享一些小众的动画软件。


    4001e073ac09ecddee2562536b3ddff9.png

    Loom

    在ipad上绘制gif很多时候是为了绘制循环动画,但是很多软件在首尾帧相连这一点上做得并不到位。而Loom就是一个专门针对循环动画痛点的软件。

    c30c69995ea28bfcd2ff566150b2c976.gif

    这是我自己随便画的小范例

    这款软件的交互界面设计得非常好,干净整洁。而且每次新建一个项目,项目会默认帮你配一个好看的配色。所以就算配色渣也可以自动可可爱爱。

    0930f9a36faec25010816bd2f5bf539d.png

    Loom的界面是需要双手共用的。左边一个轮子是代表帧,本身就是首尾相接的原形;转动关键帧只需在屏幕左上方向上或向下翻动就可以。而在不按住那个圆形的时候它就会自动藏在左侧,只露出轮子的一半。(上图中,突出来的轮子表示你所在的图层。这是当你有多个图层时候的显示方式)。每次按住的时候这个它又会弹出来。其他功能,例如橡皮擦,颜色,标记关键帧等功能。

    优点:

    值得一提的是,Loom应该是一个矢量作画软件,也就是说动画会记忆你所有的笔触,而不是像素。因此,它的橡皮擦每次擦掉的不是像素,而是一整个笔触,这样你也不用担心你的两道笔触重叠时候的擦除问题。

    在颜色上Loom的操作也和其他动画软件不一样;因为是矢量作画,如果改变左边的颜色选择,改变的是一整个图层里所有帧的颜色。

    4accc8da82fe79e2f87e6d4b4921a829.png

    ac5a8539044e4c086e2fa0e57a26c7e5.png

    另外,你可以自由地放大缩小你的动画,因为矢量是可以无限放大的。但正因如此,Loom的图像导出和其他软件有所不同——你只能通过屏幕录制得到。当你按住左下角,会弹出图层顺序的选择以及背景颜色选择的功能。在顶端有一个录像的选择工具,你可以通过那个直接录制你的动画,想要录制多久都可以。

    这个动画作画最大的好处,是你可以无限地继续作画下去。计算首尾帧相逢了,所有帧都画满了时你的图像还没有相遇重复,你依旧可以顺着在其他地方画下去,以此达到一种很复杂的循环效果。而且不同图层即使时间码率不一样也可以一起快乐玩耍,还可以形成此起彼伏的不规则循环。

    f7ee59c70fd5881f46df10df4309f6c9.gif

    缺点:

    特殊的导出方式,这使它无法直接导出GIF格式,也没有所谓的“设置画布大小”一说。要想用它用作一些诸如绘画表情包之类的功能上就比较困难。而且你无法使用套索工具来移动你画过的内容。算是个比较严重的缺点。但是如果你画的动画都是较为简单的动画则应该影响不大。

    矢量橡皮擦因为只擦除路径不擦除像素,对于大部分来说可能不太习惯。而且在微调的时候可能会给你带来一定程度的不便,但是如果你画的是一些比较工整干净的动画,这或许会派上用场。

    另一个小缺点,是Loom的洋葱皮有一定的方向性。也就是说你只能看道前一帧的动画,看不到后一帧的动画。对于喜欢用“二分法” (我随便乱叫的名字,意思是先画关键帧再补充中间帧的画法)的朋友会造成一定程度的不便,因为这样需要目测前一帧的位置。

    这样看来Loom似乎更适用于放松以及小练习时候的循环动画,对于更复杂的内容则无法满足。

    而且这是一个付费的软件。如果是为了像素作画而付费购买可能会觉得有点不值。


    59df71e5e9d708c82937002b48876dab.png

    Flippa Clippa

    这个就是我用FlipaClip导出PNG图像序列后,在ps里整合+描边后的小动画表情。

    1f2d5c50f5f1d95dee742d3e2938fb6e.png

    7918ac6e7cf32815dc549001057a3a52.gif

    不要问我为什么没有表情,姐画的表情包是“无情包”

    优点:

    这是一款轻量级的gif绘制软件。我曾经推荐过诸如animator之类的软件,但是animator有一个严重的问题就是无法设置画布大小,以及水印问题。在FlipaClip里,如果你使用收费版就可以设置画布和去除水印,当然这样免费版依旧会有水印,但至少有一个选项不是吗。FlipaClip 的界面很简单,关键帧的安排方式也是比较常见的单帧模式。但是它的优势在于它比普通的小动画软件功能稍微多一点点,例如修改画布大小,改变背景颜色(你甚至可以用它给的素材模板)等。

    a704219d09aa46497e53730fbce72039.png

    而且FlipaClip的导出也比较方便,可以直接导出透明背景的GIF或者PNG序列。

    值得一提的是虽然是轻量级,但是倒有不少笔触可以用来玩,大家可以自己探索一下。

    030491fd49bf6d47b56e6925bc7f15ec.png

    缺点:

    一个很严重的缺点,就是它的关键帧不!能!拖!拽!所以只能手动复制+粘贴来实现移动关键帧。而且复制关键帧的时候需要先长按一下关键帧,弹出窗口之后再复制,再粘贴,并没有直接的 “制作副本”选项(duplicate),因为不能改变关键帧持续的时长,如果遇到需要某一帧停留比较长时间的时候就会很麻烦。不过好在复制一次可以多次粘贴,至少不会有重复复制黏贴的惨状。

    e3520c781ce7113f33304f0bdb771be3.png

    另外,尽管FlipaClip支持图层功能,但是它的图层默认是每一帧都是空白的,也就是不存在什么可以用图层当“前景”“后景”之类的可能。或许这个对短小的gif没什么所谓,但是对于有背景的作画会很麻烦。

    878ba28170566c13b70558c7dc115b6a.png

    综上所述,这个软件只适合比较小的练习,也算是个中规中矩的普通动画软件。那有没有功能更完整的APP呢?之前的推文里我介绍过Animate HD这个看上去似乎主打专业动画,实则有很多血线的动画APP,接下来我推荐的这个我觉得也算是朝这个方面设计的,但是有一些挺有意思的功能。


    f7cb1ee48341e01f3d858f8481757479.png

    FrameFervor

    这是一款免费的软件(超良心是不是?),界面上会更类似专业动画软件。我这里说的“专业”不是指别的(因为这个软件其他功能上确实有缺失)而是时间轴。时间轴可以说是一个动画软件好不好用最重要的因素,毕竟做动画的效率摆在那里。而frame fervor 的时间轴操作我觉得是所有软件里数一数二的。

    083eed82cbd5373a8735b3164634d124.png

    优点:

    首先来说说时间轴。frame fervor的时间轴里的关键帧是可以随意拖拽的,非常好用。默认绘制了的帧之后都是前一帧的画面;关键帧之间的中间帧可以随意拖拽到其他关键帧中间成为填充的部分。当然也支持直接制作副本和再任何帧之后新建关键帧。

    6a170213a8575dbaad8a76e2a0cf3dd1.png

    这个时间轴还有一个很有意思的设计,是你可以自己设置想看到什么洋葱皮。普通的洋葱皮是根据现在的帧所在的位置,现实它前后的帧。这样你可以选择只显示前几帧或者好远以前的帧。图标就是一个小幽灵的标示,想要显示哪里就点一下就可以了。

    d32444cc0456a372cb1cfc15ef3a2e0d.png

    同时这个APP也支持套索工具……虽然这个工具是个刚需但是很多APP都不配备,所以要特别说明一下。

    缺点:

    首先它的笔触选择比较少,所以画出来也只有比较简单的图案。

    另一个问题就是它的洋葱皮,因为它的洋葱皮是手动设置的,所以如果你真的只需要传统的洋葱皮功能,那你会很快意识到每加一帧就要手动换一次洋葱皮也是很麻烦的一件事情。

    另外,这个软件虽然有不同的画布大小可以供你选择,但是它没有办法自己选择画布的数字。只能有几个画布选项可以选择。另外这个软件不支持导出成图片序列或者透明背景gif。

    另外有一个动画软件和这个软件的时间轴类似,可以参考一下。


    6b0bed638ee5fabe577d1387560b0f81.png

    Rough animator

    这个软件可能是我目前看到的功能最全面的软件了。

    46c32bea17558b8a23b67c98deea77b3.png

    优点:

    它的时间轴功能非常强大。它的时间轴优点类似TvPaint,可以直接在关键帧组的尾端拖拉来调整关键帧的持续长度。同时也可以在左上角显示的“Xframes”里调节这个帧可以持续多长。同时在时间轴内长按也支持制作副本或者增加新关键帧,虽然有点容易误操作。

    605cf079be46dfdc38bd2417a1aff697.png

    0a50f64de7891a3d22e8f148e9c3d4b1.png

    3cc0a21494a4104566df1594f862d4fe.png

    它有一个很厉害的功能,就是可以选择拖拽关键帧的时候,下一个图层的帧是怎么活动的。这样比方说如果修改一个人和一个球的图层,那么你就可以一起修改两个图层的相应的画面长度,而不用一个图层一个图层地修改。

    画笔的设置也很方便,你甚至可以选择画笔是在上方绘画,还是在后方绘画(类似画在已有笔触的后面)。不需要设置的时候可以把面板隐藏起来。

    23470a40bf5fb9d303514eab097ee131.png

    同时,新建画布的时候也支持修改画布大小,很方便。

    缺点:

    2698a2051757b9570987674f7ccfacae.png

    主要是画笔可选的材质比较单一,虽然也可以自主添加笔刷材质,但是可以设置的选项比procreate少很多。此外,它也没有规则图形的绘画工具(画面里面的正方形是我自己在别的软件里画好然后搬过来的)也没有所谓的尺子之类的。

    当然这些功能对于其他简单的软件或许也不重要,但是这个软件已经很不错了,在我看来它可以值得更高的要求。


    除了普通的动画软件,我还想给大家推荐一些用于特定动画的软件

    像素动画软件

    同类型的像素动画软件很多。不过像素动画软件总体都有一些缺陷。

    Pixel Master 

    0955c1c115a8255ef7f46c30a73f1ede.png

    Pixel Master 基本上大部分的功能都有,缺点就是时间轴的控制上比较差,你没有办法把关键帧向前或向后移。除此之外其他乱七八糟的功能它倒是有很多。

    729375b18c3ac0e7ab6a414ca7c30389.png

    Pixel Animator: GIF 

    aa4f55a8468ea33d8a63332cf3e3d3ce.png

    Pixel Animator: GIF 是另一个像素动画软件。它的时间轴方面做得稍微好一点,但是没有洋葱皮,而它的解决办法就是,每次新建关键帧的时候你只能复制关键帧。这样你就被迫在已有的画上面直接涂抹……某种意义上是个很简约的办法呢

    e3d6c39f64cfeb00c4ec62bb15b30203.png

    人偶动画软件

    除了手绘动画,你也可以在ipad上体验3D或者2D人偶的动画制作。

    Bot3D Editor

    89f3afda9be92b10b764724b77323d44.png

    Bot3D Editor支持简单的类似MMD的人偶动画,同时支持捏脸,换装等简单功能。想要实现让小人跳舞的梦想也不是不可能哦。 

    3fb6221b77e97a91d037412a848f8f85.png

    Stick Nodes

    0ac38766fe3d6ae9801c74200f89c4ac.png

    这款火柴人游戏比较像AE里面的人偶,可以让你用最简单的造型作出一些夸张的动作。

    edbae9f97790d09ee1a7676c6404d8f8.png

    我目前介绍的都是ios 里面的软件(因为我用的是iPad)但是相信用其他系统的平板应该也能找到合适的软件,或者有这些软件的相应平台版本。希望大家在探索这些软件的时候玩得开心~

    - END | 动画学术趴 -— 点击图片阅读更多精彩文章 —19e09427a6f7e3ed13b6024b7c38e317.png27f087614098b9a3639c17a821b578c7.pngded394661f21b0826d4765c285c6a6f4.pngf227d25ffccaade2fdad66d7889596d7.gif
    展开全文
  • 安卓天气查询预报APP软件的制作

    千次阅读 2017-07-05 15:04:05
    最近因为在上安卓课,了一个简单安卓天气查询APP,正好刚上交该软件的作业报告,顺带写一篇博文将其记录一下。该APP的功能是可以查看目前我国三万多个地区当天以及未来三天天气状况,而查询输入是城市ID、...

    最近因为在上安卓课,做了一个简单的安卓天气查询APP,正好刚上交该软件的作业报告,顺带写一篇博文将其记录一下。该APP的功能是可以查看目前我国三万多个地区的当天以及未来三天的天气状况,而查询的输入是城市ID、城市中文名称或者城市拼音三者都可以。废话不多说,开始贴代码了

    1 布局代码说明:

    1.1 activity_main布局代码

    这个App自己加入了启动的动画显示,即点击应用图标,即显示静态图片1500毫秒之后再进入天气获取界面。因此在主布局
    activity_main中只放置一张图片。将这张照片设置成为背景即可。代码如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.apress.gerber.jsonapp.MainActivity"
        android:background="@drawable/timg">
    
    1.2acyivity_choose布局代码

    这个布局用于显示查询城市的天气,布局较为复杂。代码如下:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/buju"
        android:background="@drawable/mainbackground">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true">
            <TextView
                android:id="@+id/showcity"
                android:layout_width="match_parent"
                android:layout_height="74dp"
                android:text="城市"
                android:textSize="50dp"
                android:textColor="#dd413939"
                android:gravity="center"/>
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="420dp">
                <ImageView
                    android:id="@+id/weatherpicture"
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_marginStart="52dp"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentStart="true"
                    android:layout_marginTop="44dp" />
                <TextView
                    android:id="@+id/weathercondition"
                    android:layout_width="140dp"
                    android:layout_height="40dp"
                    android:textSize="16dp"
                    android:layout_below="@+id/weatherpicture"
                    android:layout_alignStart="@+id/weatherpicture"
                    android:layout_marginTop="15dp" />
                <TextView
                    android:id="@+id/weathertempter"
                    android:layout_width="150dp"
                    android:layout_height="120dp"
                    android:textSize="16dp"
                    android:layout_alignTop="@+id/weatherpicture"
                    android:layout_alignParentEnd="true"
                    android:layout_toEndOf="@+id/weathercondition" />
                <TextView
                    android:id="@+id/otherday"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="18dp"
                    android:textSize="16dp"
                    android:layout_below="@+id/weathercondition"
                    android:layout_alignParentStart="true" />
            </RelativeLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal">
        <Button
            android:id="@+id/beijing"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dp"
            android:layout_weight="1"
            android:text="北京"
            android:background="@drawable/button_grey"
            />
        <EditText
            android:id="@+id/insert1"
            android:layout_width="1dp"
            android:layout_height="wrap_content"
            android:background="#aba8a8"
            android:focusable="false"/>
        <Button
                android:id="@+id/xuzhou"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/beijing"
                android:layout_weight="1"
                android:text="徐州"
            android:background="@drawable/button_grey"/>
            <EditText
                android:id="@+id/insert2"
                android:layout_width="1dp"
                android:layout_height="wrap_content"
                android:background="#aba8a8"
                android:focusable="false"/>
            <Button
                android:id="@+id/shanghai"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/insert2"
                android:layout_weight="1"
                android:text="上海"
                android:background="@drawable/button_grey"/>
            <EditText
                android:id="@+id/insert3"
                android:layout_width="1dp"
                android:layout_height="wrap_content"
                android:background="#aba8a8"
                android:focusable="false"/>
            <Button
                android:id="@+id/othercity"
                android:layout_width="105dp"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/insert3"
                android:text="其他城市...."
                android:background="@drawable/button_grey"/>
        </LinearLayout>
    </RelativeLayout>
    

    总体为相对布局,在相对布局中分为了三大块,顶部,中部以及底部。顶部用于显示用户查询的城市的名称,中部主要是
    ImageView和各类TextView控件,ImageView用于显示当天该城市的天气情况,而TextView用于显示返回的Json天气数据经过
    解析之后的结果。底部用于显示四个按钮,分别是显示西安、徐州、深圳以及其他城市。点击前三个城市可以在顶部和中部实现
    显示西安、徐州、深圳以及其他城市。点击前三个城市可以在顶部和中部实现显示该城市的当天以及未来三天的天气状况。而点
    击其他
    按钮则会提示用户输入一个需要查询的城市,确认之后同样可以显示查询城市的天气状况。

    2 Activity代码说明

    2.1 MainActivity代码说明:

    MainActivity用于显示启动的动画,因此在onCreate()中只开了一个线程用于延时1.5秒操作,延时完成即跳转到ChooseActivity
    中查看城市天气。代码如下所示:

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
    Intent mainIntent=new Intent (MainActivity.this,ChooseActivity.class);
                    MainActivity.this.startActivity(mainIntent);
                    finish();
                }
            },1500);
    }
    
    2.2 ChooseActivity 代码说明

    这个活动中主要实现的就是根据用户输入的城市名称、拼音或者城市ID来查询当地当天以及未来三天的天气状况。
    按照程序运行的顺序,首先点击按钮来获取天气:

    @Override
        public void onClick(View view) {
            switch (view.getId()){
                case  R.id.beijing:
                    City_ID = "101010100";
                    City_Name = "北京";
                    City_Provience = "北京";
                    sendRequestWithHttpClient();
                    break;
                case  R.id.xuzhou:
                    City_ID = "101190801";
                    City_Name = "徐州";
                    City_Provience = "江苏";
                    sendRequestWithHttpClient();
                    break;
                case  R.id.shanghai:
                    City_ID = "101020100";
                    City_Name = "上海";
                    City_Provience = "上海";
                    sendRequestWithHttpClient();
                    break;
                case  R.id.othercity:
                    create_dialog();
                    break;
                default:
                    City_Name = "徐州";
                    sendRequestWithHttpClient();
                    break;
    
            }
    }
    

    onClick()函数来判断点击了哪个按钮,之后将City_Name赋值为该城市的名称。若点击的是前三个城市按钮,则接下来调用

    sendRequestWithHttpClient()进行网络请求。


    public void sendRequestWithHttpClient(){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int code;
                    try {
                        String path = "http://api.map.baidu.com/telematics/v3/weather?location="+City_Name+"&output=json&ak=GuZriL3rkm1MUnyTyfsNGvTC";
                        URL url = new URL(path);
                        /**
                         * 这里网络请求使用的是类HttpURLConnection,另外一种可以选择使用类HttpClient。
                         */
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("GET");//使用GET方法获取
                        conn.setConnectTimeout(5000);
                        code = conn.getResponseCode();
                        if (code == 200) {
                            /**
                             * 如果获取的code为200,则证明数据获取是正确的。
                             */
                            InputStream is = conn.getInputStream();
                            String result = HttpUtils.readMyInputStream(is);
                            /**
                             * 子线程发送消息到主线程,并将获取的结果带到主线程,让主线程来更新UI。
                             */
                            Message msg = new Message();
                            msg.obj = result;
                            msg.what = SUCCESS;
                            handler.sendMessage(msg);
                        }else{
    
                            Message msg = new Message();
                            msg.what = ERRORCODE;
                            handler.sendMessage(msg);
                        }
                    }catch (Exception e){
                        Toast.makeText(ChooseActivity.this,"网络请求失败",Toast.LENGTH_SHORT).show();
                    }
                }
            }).start();
        }
    
    sendRequestWithHttpClient()函数中,根据输入的网址信息path,利用网络请求类HttpURLConnection与服务器建立连接,设置请
    求方式为“GET”,连接超时为5000,之后根据返回码code是否为200来判断获取数据是否成功。不成功则提示错误,成功则获取字节
    流,再用自定义的HttpUtils将获取的字节流转换成字符串再通过hangler将其发送到主线程中的Handler中去。

    private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case SUCCESS:
                        /**
                         * 获取信息成功后,对该信息进行JSON解析,得到所需要的信息,然后在textView上展示出来。
                         */
                        JSONAnalysis(msg.obj.toString());
                        Toast.makeText(ChooseActivity.this, "获取数据成功", Toast.LENGTH_SHORT)
                                .show();
                        break;
    
                    case FAILURE:
                        Toast.makeText(ChooseActivity.this, "获取数据失败", Toast.LENGTH_SHORT)
                                .show();
                        break;
                    case PICTURE:
                        weatherpiture.setImageDrawable((Drawable) msg.obj);
                        break;
                    case ERRORCODE:
                        Toast.makeText(ChooseActivity.this, "获取的CODE码不为200!",
                                Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
            }
        };
    Msg的状态码有四个,分别是成功获取数据,获取数据失败,获取照片(在请求照片中会用到),网络请求失败。
    在成功获取数据时,调用JSONAnalysis对获取到的字符串进行Json解析。

    在解析之前,先来看看这个网址:

    http://api.map.baidu.com/telematics/v3/weather?location=徐州&output=json&ak=GuZriL3rkm1MUnyTyfsNGvTC

    只要把徐州换成任何一个地区就行,接着看看它返回的数据:

    {"error":0,"status":"success","date":"2017-06-30","results":[{"currentCity":"徐州","pm25":"105","index":[{"title":"穿衣","zs":"炎热","tipt":"穿衣指数","des":"

    天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。"},{"title":"洗车","zs":"不宜","tipt":"洗车指数","des":"不宜洗车,未来24小时内有雨,

    如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"},{"title":"感冒","zs":"少发","tipt":"感冒指数","des":"各项气象条件适宜,发生感冒机率

    低。但请避免长期处于空调房间中,以防感冒。"},{"title":"运动","zs":"较不宜","tipt":"运动指数","des":"有降水,推荐您在室内进行低强度运动;若坚

    持户外运动,须注意选择避雨防滑并携带雨具。"},{"title":"紫外线强度","zs":"弱","tipt":"紫外线强度指数","des":"紫外线强度较弱,建议出门前涂擦SPF

    在12-15之间、PA+的防晒护肤品。"}],"weather_data":[{"date":"周五 06月30日 (实时:31℃)","dayPictureUrl":"http://api.map.baidu.com/images/

    weather/day/leizhenyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/zhongyu.png","weather":"雷阵雨转中雨","wind":"南风

    微风","temperature":"33 ~ 23℃"},{"date":"周六","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/zhongyu.png","nightPictureUrl":"http:

    //api.map.baidu.com/images/weather/night/yin.png","weather":"中雨转阴","wind":"南风微风","temperature":"29 ~ 23℃"},{"date":"周日","dayPictureUrl"

    :"http://api.map.baidu.com/images/weather/day/xiaoyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/yin.png","weather":"小

    雨转阴","wind":"西南风微风","temperature":"32 ~ 24℃"},{"date":"周一","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/xiaoyu.png",

    "nightPictureUrl":"http://api.map.baidu.com/images/weather/night/xiaoyu.png","weather":"小雨","wind":"南风微风","temperature":"31 ~ 23℃"}]}]}

    以上就是服务器返回的JSON数据,接下来就是解析就可以了:

    protected void JSONAnalysis(String string) {
            JSONObject o;
            try {
                o = new JSONObject(string);
                int returnResult = o.getInt("error");
                if (returnResult == 0) {   //returnResult表示成功返回JSON数据
                    String date = o.getString("date");  //日期
                    JSONArray posts = o.getJSONArray(("results"));// 只有一个result
                    JSONObject tempObj = (JSONObject) posts.get(0);// 第0个对象,第0个对象是当天的天气,先只显示当天的天气
                    cityname.setText(tempObj.getString("currentCity")); //设置城市的名字
    
                    JSONArray tempArr = tempObj.getJSONArray("weather_data");
                    JSONObject tempWeatherData = (JSONObject) tempArr.get(0);// 当天天气
                    //时间、温度以及PM2.5
                    String PM = tempObj.getString("pm25");
                    if (PM.length()==0)PM="无数据";
                    temptureanddate.setText("时间:"+tempWeatherData.getString("date")+"\n"+tempWeatherData.getString("temperature")+"\n"+"PM2.5:"+PM);
                    //获取天气图片
                    image_url = tempWeatherData.getString("dayPictureUrl").toString();
                    //获取天气状况图片
                    getBitmap(image_url);
                    weatherpiture.setImageDrawable(drawable);
                    //天气状况以及风力
                    weatherandwind.setText(tempWeatherData.getString("weather")+"    "+tempWeatherData.getString("wind"));
    
                    /*获取后三天的数据
                    * */
                    String threedays = null;
                    JSONObject day1 = (JSONObject) tempArr.get(1);// 第1个对象,第1对象是后一天的数据
                    JSONObject day2 = (JSONObject) tempArr.get(2);//第2个对象,第2对象是后两天的数据
                    JSONObject day3 = (JSONObject) tempArr.get(3);//第3个对象,第3对象是后三天的数据
                    threedays = "\n"+tempObj.getString("currentCity")+"接下来三天的天气状况"+"\n"+"\n"+day1.getString("date")+":"+day1.getString("weather")+"  
     温度:"+day1.getString("temperature")+"   风力:"+day1.getString("wind")+"\n"+"\n"+
                    day2.getString("date")+":"+day2.getString("weather")+"   温度:"+day2.getString("temperature")+"   风力:"+day2.getString("wind")+"\n"+"\n"+
                            day3.getString("date")+":"+day3.getString("weather")+"   温度:"+day3.getString("temperature")+"   风力:"+day3.getString("wind");
                    otherdays.setText(threedays);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            /**
             * 在获取的string这个JSON对象中,提取所需要的信息。先测试一下
             */
            System.out.println(string);
            Log.i("JSON",string);
        }

    上述即为Json解析的函数,解析过程比较简单,解析之前先创建一个JSONObject,之后根据key值来获取数据,其中会涉及到JSON数组,需要用到

    JSONArry,但是总体解析并不复杂,之后将解析的数据显示在TextView中即可,这样可以显示该地区当天以及未来三天的天气状况。
    但其中有个问题,显示当天天气的图片返回的是一个网址,因此还需要通过网络编程来获取图片。代码如下所示:

    public void getBitmap(final String path) throws IOException {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        URL url = new URL(path);
                        HttpURLConnection conn = null;
                        conn = (HttpURLConnection)url.openConnection();
                        conn.setConnectTimeout(5000);
                        conn.setRequestMethod("GET");
                        if(conn.getResponseCode() == 200){
                            InputStream inputStream = conn.getInputStream();
                            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                            drawable = new BitmapDrawable(bitmap);
                            Log.i("Bitmap",bitmap.toString());
                            Log.i("Drawable",drawable.toString());
                            Message msg = new Message();
                            msg.obj = drawable;
                            msg.what = PICTURE;
                            handler.sendMessage(msg);
                        }
    
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
            }).start();
        }
    

    GetBitmap()获取照片的方法和之前网络请求JSON数据思路一模一样,请求完之后,将msg的状态码置为 PICTURE(获取照片),调用Handle在主线程中更新

    ImageView即可。至此即完成了天气的获取。

    接下来是第四个按钮,点击之后生成的是一个可以输入文字的AlertDialog提示框,点击之后用户可以用三种方式输入:城市的中文名称、城市的拼音、城市的ID,

    输入其中任何一项都可以查询到当地的天气。代码如下所示:

    public void create_dialog(){
            final EditText et = new EditText(this);
            et.setMaxLines(1);
            AlertDialog.Builder builder = new AlertDialog.Builder(ChooseActivity.this);
            builder.setTitle("查询的城市名称,格式例如:徐州 OR (xuzhou),拼音不区分大小写");
            builder.setIcon(android.R.drawable.btn_star);
            builder.setView(et);
            builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                   City_Name = et.getText().toString();
                    if (City_Name == null) {
                        Toast.makeText(ChooseActivity.this, "请不要输入错误的数据", Toast.LENGTH_SHORT).show();
                    }
                    if (City_Name.length()==0)
                        City_Name="徐州";
                    sendRequestWithHttpClient();
                }
            });
            builder.setNegativeButton("取消",null);
            builder.show();
        }
    
    其中调用的请求JSON以及解析JSON数据的函数在之前已经说明。这样就可以实现对我国目前三万多个不同地区天气的查询,功能非常强大。
    最后的一部分关键代码是自己写的将网络请求得到的字节流转换成字符串的HttpUtils类。代码如下:

    public class HttpUtils {
    	public static String readMyInputStream(InputStream is) {
    		byte[] result;
    		try {
    			ByteArrayOutputStream baos = new ByteArrayOutputStream();
    			byte[] buffer = new byte[1024];
    			int len;
    			while ((len = is.read(buffer))!=-1) {
    				baos.write(buffer,0,len);
    			}
    			is.close();
    			baos.close();
    			result = baos.toByteArray();
    			
    		} catch (IOException e) {
    			e.printStackTrace();
    			String errorStr = "获取数据失败。";
    			return errorStr;
    		}
    		return new String(result);
    	}
    
    (最后需要注明一项,目前百度天气查询不再提供天气查询API的获取,此次的链接:http://api.map.baidu.com/telematics/v3/weather?location=徐州&output=json&ak=GuZriL3rkm1MUnyTyfsNGvTC 来自CSDN博主:u012606241,网址链接:http://blog.csdn.net/u012606241/article/details/25656207)

    二、显示截图



    最后该项目的资源链接如下:

    http://download.csdn.net/detail/jian_yun_rui/9889477



    展开全文
  • 你只需要输入专注于文字,文字可以转换为语言加动画的视频效果,再加上背景音乐,简单的文字动画视频就只完成了。软件名称: 字说功能描述: 手机端,一款可以制作文字动画视频的app。下载方法: 酷安应用平台搜索...
    653bee28a586928812ee2730559d9b6e.png

    告别电脑剪辑,超火的文字动画视频,用app就能一键轻松制作!你只需要输入专注于文字,文字可以转换为语言加动画的视频效果,再加上背景音乐,简单的文字动画视频就只做完成了。

    软件名称: 字说

    功能描述: 手机端,一款可以制作文字动画视频的app。

    下载方法: 酷安应用平台搜索下载

    使用心得: 只需要输入你的文字,文字就可以转换为语言加动画的视频效果,再加上背景音乐,简单的文字动画视频就只做完成了。

    方法/步骤

    字说是一款可以制作文字动画视频的app,在手机上即可制作出有动画效果的文字动画视频。语音变视频,一键生成文字动画视频,文字动画细节可随意编辑。

    视频中的文字会随着声音而翻转跳动,非常有趣,可以吸引百万流量的抖音播放点赞。但是之前网上的其他教程都是告诉大家要用复杂的电脑AE软件再结合脚本才能制作,门槛很高,不适合普通人学习。现在用字说,就可以在手机上轻松一键制作啦~

    打开字说,在首页可通过语音识别、本地视频语音识别的功能,一键直接将自己说的语音或者视频中的语音转换生成文字动画视频。非常的简单。建议大家可以自己说好玩的段子或者语录来转换,这样视频就更有原创性。

    6e4999f92eced5138aa0439e2acc68d7.png

    由于中华汉语博大精深,如果字说的人工智能语音识别系统转换出的文字有偶尔的不准确,均可在“编辑”界面进行优化和细节排版。它的编辑动画规则为:一行为一个动画,空行代表文字动画的翻转效果。普通话越标准,系统识别出的文字识别就越准确啦。

    8cd867c6a14fbe6078d9488f1ee7a066.png

    在编辑页面点击下方的“字体”、“文字颜色”、“特殊文字颜色”、“背景”按钮,即可对相关内容进行自定义的修改,任意编辑,形成自己的特色风格。

    果你是个懒癌患者,不想自己编辑配色细节,在编辑页面,点击下方“风格”按钮,可以一键套用系统中的配色排版风格,对视频风格配色进行快速预览修改。

    还有纸、变声、背景音乐功能供你选择。各方面编辑完成后可以预览,预览满意后,在预览界面点击“保存”按钮,制作好的文字动画视频就会保存到手机相册。

    这样一个有趣的文字动画视频就制作成功啦。只要自己准备好“说话”的内容,就可以快速生成酷炫的文字动画视频。发到抖音或者其他平台都会有很好的效果,非常适合来做短视频日常娱乐或软营销,快去试试吧!

    展开全文
  • dyh:这次项目很难,本来想在里面添加动画效果,但是找了很多例子都没看明白,能力还是不足够把,还有一个就是数据库在安卓课程里面刚刚涉及到,所以也还没能做出数据储存;网络储存什么就更加不会了,只能...

    软件工程项目之摄影App

    心得体会:

    dyh:这次的项目很难做,本来想在里面添加动画效果的,但是找了很多例子都没看明白,能力还是不足够把,还有一个就是数据库在安卓课程里面刚刚涉及到,所以也还没能做出数据储存;网络储存什么的就更加不会了,只能实现简单的跳转,储存方面只会使用intent传递数据。安卓这个学期才学,看上去很简单,但是实则真的不是很简单呢,特别是数据库方面的,而且难的网络方面的还没有接触到,以后真的要努力学习了,要在安卓这方面做出出色的APP。

    Ives:我是觉得我一做起来就有心无力的样子,开始选题目的时候会想着挑战一下,但是其实能力还是很不足的。开始我觉得这个app看上去好像没什么,很简单的样子,实则不是这样,因为这个O2Oapp其实涉及到网络上的东西的,有一些你在网上找到demo也看不懂原理,所以想要修改也是很难修改的。不过我们大概做出来个框架,网络的东西因为一点都不会所以没能使用在里面。而且数据库我也不怎么会,所以里面也没使用到数据库。经过这次的安卓项目,我发现真的很菜,很多东西都没接触到,所以我决定在寒假好好学习安卓,慢慢改进这个app。

     

    app功能:

        1.手机短信验证登录

        2.可以预约摄影师时间,选择不同的摄影师

        3.有提供两套不用的摄影类型:情侣时光和青春留念

        4.可以填写资料成为摄影师

        5.可以查看历史订单(预约的时间和摄影师)

     app运行截图:

    遇到的问题和解决方法:

         1.使用mob的sdk的时候会出现缺少so文件,所以要把smmsk里面的全部都放进去lib里面。

         2.如果是使用别人的demo一定要把标注黄色的改成自己的,可以去mob官网申请,是免费的!

         3.刚开始通过使用inten跳转到另一个activity,但是跳转不了,直接退出了。

         4.刚开始使用intent传递时间数据的时候到另一个activity的时候,传递不过去,是因为没有在另一个activity里面get数据,所以put跟get要对应。

         5.putExtre只能用于跳转的activity。

         6.还有就是在引用代码的时候,出错的时候可以回因为编码类型不是gbk,改成utf-8.

         7.不能随便修改主activity,如果java class 里面有别的类,要先注释下面的才能够运行。

         8.

     

     

    代码:https://github.com/IvesHe/Yuepai 

    转载于:https://www.cnblogs.com/IvesHe/p/5054317.html

    展开全文
  • 4 关于做动画,建个3D模型怎样做成动画并在我自己编的app里面显示呢?有什么书籍或者例子可以参考吗? 求教各位大神了,我对于这些真完全不懂,但是毕设题目已经联系老师了,老师让我做出ppt来,我觉得我只有...
  • 软件非常实用,可以快速制作表情包,将图片转化为动画等等,非常方便,操作也是相当简单,轻轻松松打造属于自己表情包,如果你也有需要话,那还在等什么呢,快来下载吧!动图GIF助手app介绍动图GIF助手是一...
  • 等等而这种界面设计的动画目前在市面上的APP软件中最多是应用中界面启动页中,用来宣传企业文化或者一些宣传。然而如果这些动画融入了用户操作中会产生一个怎样效果呢?、编辑信息动态效果,这样一个...
  • Android天气预报app源码

    2017-12-08 11:34:49
    app时一款简洁大方的app软件,可以查看全国各省市县地区名称,并查看当地天气状况。支持国内地域切换。更具天气情况由相关动画,比如下雨,下雪,云飘动。 可以设置是否自动更新天气,以及更新频率。 新人,...
  • 你可以用ae或者PS,做动画脚步导出gif动画格式,分层动画,希望我解答对你有所帮助同时也关注一下我头条号谢谢@大鹏日常生活记录动态图片添加文字用什么软件?以下手机软件可以给GIF图片加文字:1、GIF制作...
  • · 完成教务系统相关衔接功能,正在图书馆和体测系统相关功能 · 大面积换肤 · 重做了登录界面 2018/5/8日 JWSysAssistant V2.0 · 大面积换肤,增加大量动画效果 · 优化重整项目分包,使其更规整更好区分...
  • 由于我的毕业设计是一个音乐播放器,那么Windows商店上优秀的软件当然是网易云音乐了,为了不用自己去设计一些界面,所以山寨之路走起吧。 二、模仿网易云音乐动画之播放页面切换  直接观察网易云音乐的播放...
  • 制作手机gif动画

    2016-02-18 16:52:32
    偶尔看到一款gif制作的软件,GifCam,  能够像录视频那样制作gif,觉得特别的好,然后就可以自己一些发qq表情了, 开始在想怎么弄手机app动画呢,想到了用豌豆夹,但是效果太差了, 发现电脑上有...
  • 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示引导页面(介绍这个软件的几张可以切换图) 自己了一下,结合之前学过 慕课网_ViewPager切换动画(3.0版本以上有效果) 思路很简单,APP的...
  • 推荐超精准,不要太惊讶张太太向丝瓜客服发来感叹号,她说看完丝瓜视频推荐美妆与下厨攻略,把手机丢一边家务,后来发现被儿子玩了一阵子丝瓜视频竟然开始推荐各类动画片。丝瓜视频聪明而敏感,分秒内就能计算...
  • 又到了金三银四季节了,忙人特别忙,面试啊,加班啊,闲人也是特别闲吧,就比如我,天天划水,闲写文章,做动画,同时呢各种新技术在不断涌进,推动者软件行业发展,不要焦虑,不要着急,学好本分,再...
  • 文件读写 2 文件读写 1 星座对对碰文件读写 本次课程介绍了星座对对碰文件读写 一文件调用 1导入素材 这次做的app需要准备素材比较多除了需要用的动画图片之外还需要许多关于星座契合度文字资料如果将这些...
  • 这次分享是一个很常见效果,凡是涉及到购物的app或者旅游类以及订餐类的app都有看到过这种效果,两个list view联动显示,添加购物车时一个抛物线动画实现,以及图标或者item右上角数字显示。下面是我空闲...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    最富哲理的软件工程 UML是“三人帮”“捣”出来的 迭代开发过程这样流转 软件工程水平是这样提高的 敏捷开发过程-Scrum 送餐管理系统--用例图 送餐管理系统--类图 送餐管理系统--顺序图 任务1 软件工程 软件...
  • 把视频中一小段成GIF动图

    千次阅读 2017-04-11 15:58:02
    想把手机屏幕动作录制下来进行分享,可以使用“录屏大师”,下载这个app,非常好用。 但有时候需要gif形式的动画形式演示。 推荐两个在线工具: 一、 有浏览器就行,不需要下载任何播放器/PS/软件等:...
  • 随着移动互联网的到来这GIF图片又开始火了. 虽然现在iPhone上有不少 GIF 图片拍摄软件....Mac App Store上有一个限免的软件 Final GIF Cut 视频转GIF * 这个软件虽然免费但是有内购 . 要花4.99去掉水印. ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 144
精华内容 57
关键字:

做动画的软件app