无法初始化Animation类型的对象

时间:2015-10-01 21:06:07

标签: android

初始化动画类型的对象时,我收到以下警告。

(警告添加为评论)

Animation bottomUp = AnimationUtils.loadAnimation(
     android.content.Context, // warning: Expression expected 
     R.animator.bottom_up     // warning: Expected resource of type anim
);

这是一张照片

enter image description here

以下是代码摘要:

   public class MainActivity extends AppCompatActivity {

        // Class variables go here

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

                // Set onclick listener 

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

                    // Animation Code

                    Animation bottomUp = AnimationUtils.loadAnimation(
                            android.content.Context, // warning: Expression expected 
                            R.animator.bottom_up // warning: Expected resource of type 
                    );


                    ViewGroup hiddenPanel = (ViewGroup)findViewById(R.id.hidden_panel);
                    hiddenPanel.startAnimation(bottomUp);
                    hiddenPanel.setVisibility(View.VISIBLE);


                }
            });



        }

        // Other stuff
    }

这是我尝试编译后的log cat

enter image description here

这是我使用错误代码的地方

  public class MainActivity extends AppCompatActivity {

listView1.setOnItemClickListener(new AdapterView.OnItemClickListener(){

 @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

            Animation bottomUp = AnimationUtils.loadAnimation(
                    android.content.Context,
                    R.animator.bottom_up
            );


            ViewGroup hiddenPanel = (ViewGroup)findViewById(R.id.hidden_panel);
            hiddenPanel.startAnimation(bottomUp);
            hiddenPanel.setVisibility(View.VISIBLE);

我找不到错误。

我创建了正确的文件夹和文件。他们在这里。

enter image description here

Here是我获得动画代码的地方。

bottom_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromYDelta="75%p" 
        android:toYDelta="0%p"
        android:fillAfter="true"
        android:duration="500"/>
</set>

bottom_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromYDelta="0%p" 
        android:toYDelta="100%p" 
        android:fillAfter="true"
        android:interpolator="@android:anim/linear_interpolator"
        android:duration="500" />
</set>

Java

Animation bottomUp = AnimationUtils.loadAnimation(getContext(),
            R.anim.bottom_up);
ViewGroup hiddenPanel = (ViewGroup)findViewById(R.id.hidden_panel);
hiddenPanel.startAnimation(bottomUp);
hiddenPanel.setVisibility(View.VISIBLE);

尝试创建anim文件夹。得到了这个消息。

enter image description here

2 个答案:

答案 0 :(得分:1)

第一个参数应该是Context对象。试试&#34;这个&#34;如果你在Activity中使用它。

第二个警告是因为你在animator文件夹中有你的动画(所以它被识别为动画师资源),而AnimationUtils.loadAnimation中的第二个参数是用@AnimRes注释注释的,所以这只是警告/建议你的参数应该是资源anim类型。这只是棉绒警告而不是编译器。

这可以编译:

Animation bottomUp = AnimationUtils.loadAnimation(
 this, // if You are in Activity
 R.animator.bottom_up 
);

要加载Animator,请尝试:

Animator animator = AnimatorInflater.loadAnimator(this, R.animator.bottom_up );

但这不是你想要的。只需将文件移动到动画文件夹即可。

完整示例代码:

package com.example.user.exampleapp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Animation bottomUp = AnimationUtils.loadAnimation(this,
            R.anim.bottom_up);
        TextView hiddenPanel = (TextView) findViewById(R.id.textView);
        hiddenPanel.startAnimation(bottomUp);
    }
}

答案 1 :(得分:0)

首先,你是否在活动中使用它?

我只知道如何处理第一个警告,对不起,但我自己也是业余爱好者。 如果您在活动中,则可以使用以下方式获取上下文:

this

getApplicationContext()

如果您不在活动范围内,则必须使用它将您的上下文传递给课程:

public class MainActivity extends Activity(){

     ThisClassNeedsContext test;

     public MainActivity(Context context){
          // other code
          test = new ThisClassNeedsContext(context);
     }
}

public class ThisClassNeedsContext { 
     public ThisClassNeedsContext(Context context){
          // now you have acces to the context
     }
}

我希望这有帮助!祝好运 编辑:Typo解释