有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android中带有循环显示和循环文库的java问题

我是按照this教程中的“T”进行操作的,但是当我运行应用程序时,我在logcat中得到了以下消息。我不确定出了什么问题,因为课堂应该在那里,对吗

Could not find method 安卓.view.ViewAnimationUtils.createCircularReveal, referenced from method io.codetail.animation.ViewAnimationUtils.createCircularReveal

主要活动:

    import 安卓.animation.Animator;
import 安卓.animation.AnimatorListenerAdapter;
import 安卓.app.ProgressDialog;
import 安卓.content.Intent;
import 安卓.os.Build;
import 安卓.os.Bundle;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.support.v7.widget.SearchView;
import 安卓.support.v7.widget.Toolbar;
import 安卓.text.TextUtils;
import 安卓.util.Log;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.view.animation.AccelerateDecelerateInterpolator;
import 安卓.widget.AdapterView;
import 安卓.widget.Filter;
import 安卓.widget.ImageButton;
import 安卓.widget.LinearLayout;
import 安卓.widget.ListView;

import com.安卓.volley.Response;
import com.安卓.volley.VolleyError;
import com.安卓.volley.toolbox.JsonArrayRequest;
import com.curtrostudios.testapp.network.AppConfig;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.ArrayList;
import io.codetail.animation.SupportAnimator;
import io.codetail.animation.ViewAnimationUtils;


/**
 * Created by CurTro Studios on 2/22/2016.
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private ProgressDialog dialog=null ;
    private String TAG="Main Activity";
    private String tag_json_arry = "json_array_req";
    private ProductsAdapter adapter;
    private ListView list;
    ArrayList<ProductRowData> rowdata;
    private SearchView searchView;
    private MenuItem myActionMenuItem;
    LinearLayout mRevealView;
    boolean hidden = true;
    private ImageButton gallery_btn, photo_btn, video_btn, audio_btn, location_btn, contact_btn;

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

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mRevealView = (LinearLayout) findViewById(R.id.reveal_items);
        mRevealView.setVisibility(View.GONE);

        gallery_btn = (ImageButton) findViewById(R.id.login_img_btn);
        photo_btn = (ImageButton) findViewById(R.id.info_img_btn);
        video_btn = (ImageButton) findViewById(R.id.share_img_btn);
        audio_btn = (ImageButton) findViewById(R.id.sortAtoZ);
        location_btn = (ImageButton) findViewById(R.id.sortDate);
        contact_btn = (ImageButton) findViewById(R.id.sortRegion);

        gallery_btn.setOnClickListener(this);
        photo_btn.setOnClickListener(this);
        video_btn.setOnClickListener(this);
        audio_btn.setOnClickListener(this);
        location_btn.setOnClickListener(this);
        contact_btn.setOnClickListener(this);

        list=(ListView)findViewById(R.id.productList);
        list.setTextFilterEnabled(true);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //Get item at position
                ProductRowData item = (ProductRowData)parent.getItemAtPosition(position);

                //Pass the image title and url to DetailsActivity
                Intent intent = new Intent(MainActivity.this, ProductDetail.class);
                intent.putExtra("sid", item.getSID());
                intent.putExtra("name", item.getName());
                intent.putExtra("image", item.getImageURL());
                intent.putExtra("thumb", item.getThumbURL());
                intent.putExtra("description", item.getDescription());
                intent.putExtra("rating", item.getRating());

                //Start details activity
                startActivity(intent);
            }
        });
        rowdata=new ArrayList<ProductRowData>();

        dialog= new ProgressDialog(this);

        dialog.setMessage("Loading...");
        dialog.show();

        JsonArrayRequest request = new JsonArrayRequest(AppConfig.URL_MAIN,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString()); try {
                            for(int i=0;i<response.length();i++){
                                String sid=response.getJSONObject(i).getString("sid");
                                String name=response.getJSONObject(i).getString("product_name");
                                String img;
                                String thumb = response.getJSONObject(i).getString("product_thumb");
                                String description = response.getJSONObject(i).getString("product_description");
                                String rating = response.getJSONObject(i).getString("product_rating");

                                img = response.getJSONObject(i).getString("product_pic");

                                rowdata.add(new ProductRowData(sid,name,img,thumb,description,rating));
                            }
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        adapter=new ProductsAdapter(MainActivity.this, rowdata);
                        list.setAdapter(adapter);
                        dialog.dismiss();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
                dialog.dismiss();
            }
        });

        VolleyController.getInstance().addToRequestQueue(request, tag_json_arry);




    }

    @Override
    public void onClick(View v) {
        hidden = true;
        switch (v.getId()) {

            case R.id.login_img_btn:

                break;
            case R.id.info_img_btn:

                break;
            case R.id.share_img_btn:

                break;
            case R.id.sortAtoZ:

                break;
            case R.id.sortDate:

                break;
            case R.id.sortRegion:

                break;
        }
    }

    public void Info(){
        Intent info = new Intent(MainActivity.this,
                InfoActivity.class);
        startActivity(info);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        myActionMenuItem = menu.findItem(R.id.action_search);
        searchView = (SearchView) myActionMenuItem.getActionView();
        searchView.clearFocus();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }


            @Override
            public boolean onQueryTextChange(String newText) {
                Filter filter = adapter.getFilter();

                if (TextUtils.isEmpty(newText)) {
                    filter.filter("");
                } else {
                    filter.filter(newText);
                }
                return true;
            }
        });
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.action_info:

                int cx = (mRevealView.getLeft() + mRevealView.getRight());
//                int cy = (mRevealView.getTop() + mRevealView.getBottom())/2;
                int cy = mRevealView.getTop();

                int radius = Math.max(mRevealView.getWidth(), mRevealView.getHeight());

                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {


                    SupportAnimator animator =
                            ViewAnimationUtils.createCircularReveal(mRevealView, cx, cy, 0, radius);
                    animator.setInterpolator(new AccelerateDecelerateInterpolator());
                    animator.setDuration(800);

                    SupportAnimator animator_reverse = animator.reverse();

                    if (hidden) {
                        mRevealView.setVisibility(View.VISIBLE);
                        animator.start();
                        hidden = false;
                    } else {
                        animator_reverse.addListener(new SupportAnimator.AnimatorListener() {
                            @Override
                            public void onAnimationStart() {

                            }

                            @Override
                            public void onAnimationEnd() {
                                mRevealView.setVisibility(View.INVISIBLE);
                                hidden = true;

                            }

                            @Override
                            public void onAnimationCancel() {

                            }

                            @Override
                            public void onAnimationRepeat() {

                            }
                        });
                        animator_reverse.start();

                    }
                } else {
                    if (hidden) {
                        Animator anim = 安卓.view.ViewAnimationUtils.createCircularReveal(mRevealView, cx, cy, 0, radius);
                        mRevealView.setVisibility(View.VISIBLE);
                        anim.start();
                        hidden = false;

                    } else {
                        Animator anim = 安卓.view.ViewAnimationUtils.createCircularReveal(mRevealView, cx, cy, radius, 0);
                        anim.addListener(new AnimatorListenerAdapter() {
                            @Override
                            public void onAnimationEnd(Animator animation) {
                                super.onAnimationEnd(animation);
                                mRevealView.setVisibility(View.INVISIBLE);
                                hidden = true;
                            }
                        });
                        anim.start();

                    }
                }

                return true;

            case 安卓.R.id.home:
                supportFinishAfterTransition();
                return true;
            case R.id.action_search:
                return true;
            case R.id.action_share:
                return true;
        }
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        //int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        //if (id == R.id.action_search) {
        //    return true;
        //}
        //if (id == R.id.action_info) {
        //    return true;
        //}
        //if(id == R.id.action_share){
        //    //Share();
        //    return true;
        //}

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    @Override
    protected void onPause() {
        super.onPause();

    }

}

我的主要布局是:

    <安卓.support.design.widget.CoordinatorLayout
    xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:app="http://schemas.安卓.com/apk/res-auto"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:fitsSystemWindows="true"
    tools:context="com.curtrostudios.testapp.MainActivity">

    <安卓.support.design.widget.AppBarLayout
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content"
        安卓:theme="@style/AppTheme.AppBarOverlay">

        <安卓.support.v7.widget.Toolbar
            安卓:id="@+id/toolbar"
            安卓:layout_width="match_parent"
            安卓:layout_height="?attr/actionBarSize"
            安卓:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </安卓.support.design.widget.AppBarLayout>

    <FrameLayout
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent"
        安卓:layout_marginTop="?attr/actionBarSize">

    <io.codetail.widget.RevealFrameLayout
            安卓:layout_width="match_parent"
            安卓:layout_height="wrap_content">

        <LinearLayout
            xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
            安卓:id="@+id/reveal_items"
            安卓:layout_width="match_parent"
            安卓:layout_height="wrap_content"
            安卓:orientation="vertical">

            <!--row 1 -->

            <LinearLayout
                安卓:layout_width="match_parent"
                安卓:layout_height="wrap_content"
                安卓:background="#F0EFED"
                安卓:orientation="horizontal"
                安卓:padding="16dp">

                <!--Gallery Icon -->
                <LinearLayout
                    安卓:layout_width="0dp"
                    安卓:layout_height="wrap_content"
                    安卓:layout_weight="1"
                    安卓:gravity="center"
                    安卓:orientation="vertical">

                    <ImageButton
                        安卓:id="@+id/login_img_btn"
                        安卓:layout_width="70dp"
                        安卓:layout_height="70dp"
                        安卓:background="@mipmap/ic_login" />

                    <TextView
                        安卓:layout_width="wrap_content"
                        安卓:layout_height="wrap_content"
                        安卓:layout_marginTop="8dp"
                        安卓:text="Login" />
                </LinearLayout>

                <!--Photo Icon -->
                <LinearLayout
                    安卓:layout_width="0dp"
                    安卓:layout_height="wrap_content"
                    安卓:layout_weight="1"
                    安卓:gravity="center"
                    安卓:orientation="vertical">

                    <ImageButton
                        安卓:id="@+id/info_img_btn"
                        安卓:layout_width="70dp"
                        安卓:layout_height="70dp"
                        安卓:background="@mipmap/ic_info" />

                    <TextView
                        安卓:layout_width="wrap_content"
                        安卓:layout_height="wrap_content"
                        安卓:layout_marginTop="8dp"
                        安卓:text="Info" />
                </LinearLayout>

                <!--Video Icon -->
                <LinearLayout
                    安卓:layout_width="0dp"
                    安卓:layout_height="wrap_content"
                    安卓:layout_weight="1"
                    安卓:gravity="center"
                    安卓:orientation="vertical">

                    <ImageButton
                        安卓:id="@+id/share_img_btn"
                        安卓:layout_width="70dp"
                        安卓:layout_height="70dp"
                        安卓:background="@mipmap/ic_share" />

                    <TextView
                        安卓:layout_width="wrap_content"
                        安卓:layout_height="wrap_content"
                        安卓:layout_marginTop="8dp"
                        安卓:text="Share" />
                </LinearLayout>

            </LinearLayout>

            <LinearLayout
                安卓:layout_width="match_parent"
                安卓:layout_height="wrap_content"
                安卓:background="#F0EFED"
                安卓:orientation="horizontal"
                安卓:padding="16dp">

                <!--Gallery Icon -->
                <LinearLayout
                    安卓:layout_width="0dp"
                    安卓:layout_height="wrap_content"
                    安卓:layout_weight="1"
                    安卓:gravity="center"
                    安卓:orientation="vertical">

                    <ImageButton
                        安卓:id="@+id/sortAtoZ"
                        安卓:layout_width="70dp"
                        安卓:layout_height="70dp"
                        安卓:background="@mipmap/ic_a_z" />

                    <TextView
                        安卓:layout_width="wrap_content"
                        安卓:layout_height="wrap_content"
                        安卓:layout_marginTop="8dp"
                        安卓:text="A to Z" />
                </LinearLayout>

                <!--Photo Icon -->
                <LinearLayout
                    安卓:layout_width="0dp"
                    安卓:layout_height="wrap_content"
                    安卓:layout_weight="1"
                    安卓:gravity="center"
                    安卓:orientation="vertical">

                    <ImageButton
                        安卓:id="@+id/sortDate"
                        安卓:layout_width="70dp"
                        安卓:layout_height="70dp"
                        安卓:background="@mipmap/ic_sort_date" />

                    <TextView
                        安卓:layout_width="wrap_content"
                        安卓:layout_height="wrap_content"
                        安卓:layout_marginTop="8dp"
                        安卓:text="Date" />
                </LinearLayout>

                <!--Video Icon -->
                <LinearLayout
                    安卓:layout_width="0dp"
                    安卓:layout_height="wrap_content"
                    安卓:layout_weight="1"
                    安卓:gravity="center"
                    安卓:orientation="vertical">

                    <ImageButton
                        安卓:id="@+id/sortRegion"
                        安卓:layout_width="70dp"
                        安卓:layout_height="70dp"
                        安卓:background="@mipmap/ic_region" />

                    <TextView
                        安卓:layout_width="wrap_content"
                        安卓:layout_height="wrap_content"
                        安卓:layout_marginTop="8dp"
                        安卓:text="Region" />
                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

    </io.codetail.widget.RevealFrameLayout>
    </FrameLayout>

    <include layout="@layout/content_main" />

</安卓.support.design.widget.CoordinatorLayout>

这是我的身材。gradle(应用程序)文件:

apply plugin: 'com.安卓.application'

安卓 {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    defaultConfig {
        applicationId "com.myapp.testapp"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-安卓.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.安卓.support:appcompat-v7:23.1.1'
    compile 'com.安卓.support:design:23.1.1'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'com.github.traex.rippleeffect:library:1.3'
    compile 'com.安卓.support:cardview-v7:23.1.1'
    compile 'com.wrapp.floatlabelededittext:library:0.0.6'
    compile('com.github.afollestad.material-dialogs:core:0.8.5.7@aar') {
        transitive = true
    }
    compile ('com.github.ozodrukh:CircularReveal:1.3.1@aar') {
        transitive = true;
    }
}

编辑

这是我的身材。gradle(项目)文件:

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
    }
}

共 (5) 个答案

  1. # 1 楼答案

    让我猜猜,您正在一个预棒棒糖设备/模拟器上测试代码(并得到错误)

    ViewAnimationUtils已经在Android的SDK 21(棒棒糖)中引入

    你的minSdkVersion16。看一看this其他问题,建议支持库将循环展示动画带回Android 2.3。图书馆是CircularReveal。你必须用叉子来使用它

    编辑:问题没有提到它已经在使用CircularVeal库——实际上可以通过日志看到

    referenced from method io.codetail.animation.ViewAnimationUtils.createCircularReveal

    编辑2:在看到更新的响应并从OP知道logcat不是一个错误,而是一个警告之后

    这根本不是问题。这是一个Dalvik特性,它会检查缺少的类/方法,如果找不到它们,就会发出警告。除非你真的打电话给他们,否则它不会崩溃

    OkHttp库有类似的警告,您可以看到they also say您可以忽略它们

    作为旁注,CircularReveal库似乎是use注释@TargetApi,它应该使用@SuppressLint("NewApi")@TargetApi意味着只能从该Api级别调用该方法。无论如何,这不是警告的原因,因为这些信息只在编译时可用

  2. # 2 楼答案

    检查导入的库

    就我而言

    import io.codetail.animation.SupportAnimator;
    import io.codetail.animation.ViewAnimationUtils;
    

    它不会出错

  3. # 3 楼答案

    正如库中明确提到的,您应该首先添加远程maven url:

    repositories {
            maven {
                url "https://jitpack.io"
            }
        }
    

    然后是库依赖项:

    compile ('com.github.ozodrukh:CircularReveal:1.3.1@aar') {
            transitive = true;
        }
    

    现在尝试构建项目并同步gradle!如果这没有帮助,请将aar版本更改为1.1.1

    compile ('com.github.ozodrukh:CircularReveal:1.1.1@aar') {
            transitive = true;
        }
    

    看看是否有帮助

    如果问题仍然存在,我建议你阅读this博客

  4. # 4 楼答案

    对于其他任何可能看到同样问题的显示动画/菜单未显示的人,我就是这样解决问题的。并不是说RevealFrameLayout没有显示出来,它只是显示在其他一切的背后。所以,正如你在我下面的布局中所看到的,我只是将框架布局移到了所有其他内容的下方,现在它可以完美地工作了

    主布局

        <android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context="com.myapp.testapp.MainActivity">
    
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay" />
    
        </android.support.design.widget.AppBarLayout>
    
        <include layout="@layout/content_main" />
    
        //Issue was solved by adding the FrameLayout here.
        //below all other content. Works perfectly now.
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <include layout="@layout/reveal_layout" />
    
        </FrameLayout>
    
    
    
    </android.support.design.widget.CoordinatorLayout>
    
  5. # 5 楼答案

    虽然,我无法理解为什么会出现错误,因为我还没有尝试过该库,但我认为您可以轻松地实现circular reveal,而无需使用上述库。请看一下Material-Animations,它有一个非常简洁的圆形分隔缝工作示例,您可以轻松使用