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"
}
}
}
# 1 楼答案
让我猜猜,您正在一个预棒棒糖设备/模拟器上测试代码(并得到错误)
类
ViewAnimationUtils
已经在Android的SDK 21(棒棒糖)中引入你的
minSdkVersion
是16
。看一看this其他问题,建议支持库将循环展示动画带回Android 2.3。图书馆是CircularReveal。你必须用叉子来使用它编辑:问题没有提到它已经在使用CircularVeal库——实际上可以通过日志看到
编辑2:在看到更新的响应并从OP知道logcat不是一个错误,而是一个警告之后
这根本不是问题。这是一个
Dalvik
特性,它会检查缺少的类/方法,如果找不到它们,就会发出警告。除非你真的打电话给他们,否则它不会崩溃OkHttp
库有类似的警告,您可以看到they also say您可以忽略它们作为旁注,
CircularReveal
库似乎是use注释@TargetApi
,它应该使用@SuppressLint("NewApi")
@TargetApi
意味着只能从该Api级别调用该方法。无论如何,这不是警告的原因,因为这些信息只在编译时可用# 2 楼答案
检查导入的库
就我而言
它不会出错
# 3 楼答案
正如库中明确提到的,您应该首先添加远程maven url:
然后是库依赖项:
现在尝试构建项目并同步gradle!如果这没有帮助,请将aar版本更改为1.1.1
看看是否有帮助
如果问题仍然存在,我建议你阅读this博客
# 4 楼答案
对于其他任何可能看到同样问题的显示动画/菜单未显示的人,我就是这样解决问题的。并不是说RevealFrameLayout没有显示出来,它只是显示在其他一切的背后。所以,正如你在我下面的布局中所看到的,我只是将框架布局移到了所有其他内容的下方,现在它可以完美地工作了
主布局
# 5 楼答案
虽然,我无法理解为什么会出现错误,因为我还没有尝试过该库,但我认为您可以轻松地实现circular reveal,而无需使用上述库。请看一下Material-Animations,它有一个非常简洁的圆形分隔缝工作示例,您可以轻松使用