I was following this tutorial to the "T" but when I run the app I get the following message in the logcat. I'm not sure what is going wrong because the class should be there right?
Could not find method android.view.ViewAnimationUtils.createCircularReveal, referenced from method 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();
}
}
And my main layout:
<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>
This is my build.gradle(app) file:
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:0.8.5.7@aar') {
transitive = true
}
compile ('com.github.ozodrukh:CircularReveal:1.3.1@aar') {
transitive = true;
}
}
EDIT
This is within my build.gradle(project) file:
allprojects {
repositories {
jcenter()
maven {
url "https://jitpack.io"
}
}
}
For anyone else that may see this with the same issue of the reveal animation/menu not showing, this is how I solved the problem. It wasn't that the RevealFrameLayout wasn't showing, it was just showing behind everything else. So, as you can see in my layout below, I just moved the FrameLayout below all other content and it works flawlessly now.
Main Layout
<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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With