我一直在寻找适合我问题的解决方案,但我似乎找不到一个.我有一个ActionBar(ActionBarSherlock),其菜单从XML文件中膨胀,该菜单包含一个项目,并且该项目显示为ActionItem.
菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_menu_refresh"
android:showAsAction="ifRoom"
android:title="Refresh"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
活动:
[...]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
[...]
Run Code Online (Sandbox Code Playgroud)
ActionItem显示时带有图标而没有文本,但是当用户点击ActionItem时,我希望图标开始动画,更具体地说,是在适当的位置旋转.有问题的图标是刷新图标.
我意识到ActionBar支持使用自定义视图(添加动作视图)但是这个自定义视图被扩展为覆盖ActionBar的整个区域并且实际上阻止了除应用程序图标之外的所有内容,在我的情况下这不是我想要的.
所以我的下一次尝试是尝试使用AnimationDrawable并逐帧定义我的动画,将drawable设置为菜单项的图标,然后在onOptionsItemSelected(MenuItem item)获取图标并开始使用动画((AnimationDrawable)item.getIcon()).start().但这并不成功.有谁知道有任何方法来实现这种效果?
我一直在阅读Android Dev博客中的布局优化,我一直在使用hierarchyviewer来查看我可以展平或合并布局/元素的位置.但是我在视图层次结构中看到了这些东西...... NoSaveStateFrameLayout.任何人都可以对此有所了解吗?它显示(通常)在LinearLayout之前,它似乎很无用,只是在层次结构中添加了另一个(不必要的)级别.我试着寻找这是什么,但我没有运气.
我正在寻找一种更好的方法来在使用RxJava时为空结果实现一个简单的Observable回退系统.我们的想法是,如果对一组数据的本地查询导致零项,则应该进行后备查询(可以是网络调用,或其他).目前,我的代码包含以下内容:
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
List<Object> results = queryLocalDatabase();
if (results.isEmpty()) {
subscriber.onError(new Throwable("Empty results"));
} else {
// Process results...
}
}
}).onErrorResumeNext(/* Fallback Observable goes here */);
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但为空结果集抛出异常并没有多大意义.我注意到有条件运算符可用isEmpty,但是它似乎并不像我想要的那样.例如,使用isEmpty......
localObservable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
List<Object> results = queryLocalDatabase();
for (Object obj : results) {
// Process object
subscriber.onNext(object);
}
subscriber.onCompleted();
}
});
localObservable.isEmpty()
.switchMap(new Func1<Boolean, Observable<? extends Object>>() {
@Override …Run Code Online (Sandbox Code Playgroud) 我曾经拥有这种简单的JSON数据,我可以成功地解析属性并将它们保存到SQLite数据库中.
[
{
"project_title" : " ",
"organization_title" : " ",
"website": "",
"address": "",
"keyword" : "",
"short_code" : "",
"project_description" : "",
"smallImageUrl" : "",
"bigImageUrl" : "",
"price" : "",
"country" : "",
"donationAmount" : "",
"categories" : "",
"campaign_id" : "",
"currency_isoname": "",
"paypal_email" : "",
"elv_available" : ""
}
]
Run Code Online (Sandbox Code Playgroud)
但现在我有一个更复杂的JSON文件:
[
{
"location": {
"deleted_at": "null",
"documentary_video_length": "81",
"id": "15",
"latitude": "52.4134145988286",
"longitude": "13.0904620846177",
"position": "5",
"updated_at": "2011-08-26T15:30:27+02:00",
"name": "Glienicker Br\u00fccke",
"text": "",
"documentary_video_url": …Run Code Online (Sandbox Code Playgroud) 我在Samsung S5上使用新的Camera2 API.此设备报告支持的硬件级别LEGACY,这很好.
但是,我似乎无法自动对焦于此设备.触发自动对焦的请求如下所示:
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);
state = STATE_PREVIEW;
try {
captureSession.setRepeatingRequest(previewRequestBuilder.build(), captureCallback, backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
发送请求后,请求的结果始终是CONTROL_AF_STATE_ACTIVE_SCAN偶尔的CONTROL_AF_STATE_NOT_FOCUSED_LOCKED.
奇怪的是,当状态为时CONTROL_AF_STATE_NOT_FOCUSED_LOCKED,自动对焦会返回CONTROL_AF_STATE_ACTIVE_SCAN状态一段时间然后再返回状态CONTROL_AF_STATE_NOT_FOCUSED_LOCKED,从而产生无限焦点循环.根据文件,当状态是CONTROL_AF_STATE_NOT_FOCUSED_LOCKED......
镜头将保持静止,直到AF模式(android.control.afMode)更改或新的AF触发器发送到相机设备(android.control.afTrigger).
我想知道这种差异是否是因为硬件级别的问题LEGACY,我应该回到使用已弃用的Camera API,但这对于像自动对焦这样的流行功能来说似乎很疯狂.
是否有任何建议如何处理报告的设备LEGACY?
据我所知,rxjava-android在一个单独的线程上执行操作(当提供正确的调度程序时),导致非阻塞操作,但是快速而肮脏的测试似乎证明这是不正确的.
我使用了以下代码片段,在两种情况下,UI都被阻止了......
片段1
Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
int i = 0;
while (i == 0) {}
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();
Run Code Online (Sandbox Code Playgroud)
片段2
Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
SystemClock.sleep(5000);
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
我们都被建议不要使用包含滚动机制的嵌套视图.然而,在最新的Android版本(5.0)中,电话应用程序引起了我的注意,似乎是一个ListView内部ScrollView.
真正引起我兴趣的是滚动机制从无缝切换ScrollView到ListView无缝.
请注意,在实际ListView开始滚动之前,选项卡上方的内容将被推出视图.
我自己试过复制这个,但结果不成功.这是我采取的基本方法......

通过单个连续触摸事件(不抬起手指)......
当用户滚动时,ListView慢慢地覆盖了ImageView.一旦ImageView100%覆盖并ListView占据整个屏幕,就ListView开始滚动.
目前,我正在听触摸事件ListView,如果顶部已经达到了,叫requestDisallowInterceptTouchEvent上ListView,即
@Override
public boolean onTouch(View v, MotionEvent event) {
if (listViewAtTop) {
v.requestDisallowInterceptTouchEvent(true);
} else {
v.requestDisallowInterceptTouchEvent(false);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
只有当您抬起手指并继续滚动时,切换滚动上下文才有效.
是否有不同的方法可以达到预期的效果?