2016-03-21 2 views
6

Я следовал this учебник для «Т», но когда я запускаю приложение, я получаю следующее сообщение в логарифме. Я не уверен, что происходит не так, потому что класс должен быть там правильно?Проблема с круговым открытием и CircularRevealLibrary в Android

Не удалось найти метод android.view.ViewAnimationUtils.createCircularReveal, ссылочных из метода io.codetail.animation.ViewAnimationUtils.createCircularReveal

MainActivity:

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

import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.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 = android.view.ViewAnimationUtils.createCircularReveal(mRevealView, cx, cy, 0, radius); 
         mRevealView.setVisibility(View.VISIBLE); 
         anim.start(); 
         hidden = false; 

        } else { 
         Animator anim = android.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 android.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(); 

    } 

} 

И моя основная раскладка:

<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.curtrostudios.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> 

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

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

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

      <!--row 1 --> 

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

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

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

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

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

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

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

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

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

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

      </LinearLayout> 

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

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

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

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

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

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

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

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

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

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

      </LinearLayout> 

     </LinearLayout> 

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

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

</android.support.design.widget.CoordinatorLayout> 

Это м build.gradle (приложение) файл у:

apply plugin: 'com.android.application' 

android { 
    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-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    productFlavors { 
    } 
} 

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

EDIT

Это в моем build.gradle (проект) Файл:

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

столб Gradle файл здесь. –

+0

@Harshad Я добавлю это утром –

+0

@Harshad Посмотрите мои правки –

ответ

2

Для всех, кто может видеть это с той же проблемой, что и показ анимации/меню раскрытия, так я решил проблему. Дело не в том, что RevealFrameLayout не показывался, он просто показывал все остальное. Итак, как вы можете видеть в моем макете ниже, я просто переместил FrameLayout под любой другой контент, и теперь он работает безупречно.

Главная Схема

<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> 
+0

это решение работало спасибо! – Dharmishtha

0

Проверьте импортированные библиотеку.

в моем случае,

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

Это ошибка не возникнет.

+0

Да, я проверил и перепроверил это на начальном этапе и обеспечил правильный импорт. Однако, спасибо. –

0

В библиотеке было ясно сказано, что сначала вы должны добавить удаленный Maven URL:

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

, а затем зависимость библиотеки:

compile ('com.github.ozodrukh:CircularReveal:[email protected]') { 
     transitive = true; 
    } 

теперь попробуйте построения проекта и синхронизировать Gradle! Если это не помогает, замените aar-версию на 1.1.1

compile ('com.github.ozodrukh:CircularReveal:[email protected]') { 
     transitive = true; 
    } 

посмотреть, если это поможет.

также предлагаю вам прочитать this блог, если проблема по-прежнему сохраняется!

+0

см. Мое редактирование –

+0

добавить удаленный URL-адрес maven на уровне приложения build.gradle не на уровне проекта –

+0

Пробовал снова после добавления maven на уровень приложения build.gradle и изменил aar до 1.1.1. Все еще получение ошибки Не удалось найти метод createCircularReveal и не удалось разрешить статический метод createCircularReveal из класса android.view.ViewAnimationUtils. –

0

Хотя, я не мог понять, почему вы получаете ошибку, потому что я не пробовал эту библиотеку, но я думаю, что вы можете легко реализовать круговое раскрытие без использования вышеупомянутой библиотеки. Пожалуйста, посмотрите на Material-Animations, он имеет очень аккуратный рабочий пример для кругового раскрытия, который вы можете легко использовать.

0

Позвольте мне угадать, вы тестируете код (и получаете эту ошибку) на устройстве/эмуляторе pre-Lollipop.

Класс ViewAnimationUtils был представлен в Android на SDK 21 (Lollipop).

minSdkVersion является 16. Посмотрите на this другой вопрос, предлагающий библиотеку поддержки, чтобы вернуть круговую анимацию для Android 2.3. Библиотека - CircularReveal. Вам понадобится fork io.codetail.animation.ViewAnimationUtils, чтобы использовать его.

EDIT: вопрос не упоминал, что это было уже с помощью CircularReveal библиотеки - на самом деле можно увидеть в журнале

ссылка из метода io.codetail.animation.ViewAnimationUtils.createCircularReveal

EDIT 2: после просмотра обновленного ответа и знания из OP, что логарифм не является ошибкой, а просто предупреждением

Это не проблема. Это функция Dalvik, она проверяет отсутствующие классы/методы и предупреждает вас, если она их не находит. Это не приведет к сбою, если вы на самом деле не попытаетесь назвать их.

OkHttp библиотека имеет подобное предупреждение, и вы можете увидеть they also say, вы можете игнорировать их.

В качестве примечания, то CircularReveal библиотека появится в use в @TargetApi аннотацию, где он должен использовать @SuppressLint("NewApi"). @TargetApi означает, что вы должны называть этот метод только с этого уровня Api. В любом случае это не является причиной предупреждения, поскольку эта информация доступна только во время компиляции.

+0

Мое устройство работает 4.4.2. В своем ответе я запустил отдельный проект из ссылки Ishwors, и все прошло отлично. Logcat больше не дает мне подробностей относительно проблемы. Отдельный тестовый проект, запущенный на том же устройстве, дал то же сообщение logcat, которое все еще работало. :/ –

+0

см. Мое редактирование –

+0

Я изменил min api до 15, но до сих пор не вижу анимацию/раскрытие. Любые идеи, что может быть причиной этого? –

Смежные вопросы