KenBurnsView如何设置图像资源? [英] KenBurnsView how to set image resource?

查看:484
本文介绍了KenBurnsView如何设置图像资源?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的应用程序中使用法利亚的KenBurnsView 库。

KenBurnsView一些扩展的ImageView,用一个漂亮的动画效果。你可能已经看到Foursquare的应用程序的图像效果。

有关实际的图片,认为使用定义的XML机器人:SRC属性。
但我想设置期间通过Java code运行时的图像资源。我曾尝试setImageResource,setBackgroundResource,设置..drawabale和许多其他的方法。但无论怎样,我的形象设置命令总是让我的应用程序崩溃在运行时。

我一直在网上搜索针对的讨论KenBurnsView任何痕迹了几个小时,但没有运气任何责任。

我的问题是:

这怎么可能为设置KenBurnsView在运行时图像属性

编辑:

下面的堆栈跟踪:

 一月6日至16日:26:43.062:E / AndroidRuntime(16712):致命异常:主要
1月六日至16日:26:43.062:E / AndroidRuntime(16712):工艺:com.flaviofaria.kenburnsview.sample,PID:16712
1月六日至16日:26:43.062:E / AndroidRuntime(16712):了java.lang.RuntimeException:无法启动活动ComponentInfo{com.flaviofaria.kenburnsview.sample/com.flaviofaria.kenburnsview.sample.SingleImageActivity}:显示java.lang.NullPointerException
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.ActivityThread.access $ 800(ActivityThread.java:135)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.os.Handler.dispatchMessage(Handler.java:102)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.os.Looper.loop(Looper.java:136)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.ActivityThread.main(ActivityThread.java:5001)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在java.lang.reflect.Method.invokeNative(本机方法)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在java.lang.reflect.Method.invoke(Method.java:515)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在dalvik.system.NativeStart.main(本地方法)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):致:显示java.lang.NullPointerException
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.MathUtils.getRectRatio(MathUtils.java:44)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.RandomTransitionGenerator.generateRandomRect(RandomTransitionGenerator.java:93)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.RandomTransitionGenerator.generateNextTransition(RandomTransitionGenerator.java:64)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.KenBurnsView.startNewTransition(KenBurnsView.java:207)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.KenBurnsView.handleImageChange(KenBurnsView.java:280)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.KenBurnsView.setImageResource(KenBurnsView.java:126)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在com.flaviofaria.kenburnsview.sample.SingleImageActivity.onCreate(SingleImageActivity.java:36)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.Activity.performCreate(Activity.java:5231)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
1月六日至16日:26:43.062:E / AndroidRuntime(16712):... 11个


解决方案

从调用堆栈,我会说这是在库中的缺陷。它不更新 mDrawableRect 新绘制设置后立即启动。

试着改变实施 setImageResource()添加通话 updateDrawableBounds(),即

  @覆盖
公共无效setImageResource(INT渣油){
    super.setImageResource(渣油);
    updateDrawableBounds(); //< - 加线
    handleImageChange();
}

看起来这应该解决这个问题(但我没有测试过)。

修改其实,所有的 setImage< X>()方法似乎有这个问题。因此,相同的修订应使用 setImageDrawable() setImageBitmap() setImageURI ()

NEWEST修改这是现在固定,根据@FlávioFaria自己。刚刚更新到1.0.3版本。

I'm trying to use Faria's KenBurnsView library in my application.

KenBurnsView is some extension of ImageView, with a nice animating effect. You may have seen the effect in Foursquare app's images.

For the actual picture, the view uses the XML defined "android:src" property. But I want to set the image resource during run-time through Java code. I have tried setImageResource, setBackgroundResource, set".."drawabale and many other methods. But no matter what, my image setting command always makes my app crash at run-time.

I've been searching the web for a couple of hours for any trace of discussion on KenBurnsView but have had no luck whatsoever.

My question is:

How is it possible to set the image property of KenBurnsView on run-time?

EDIT :

Here's the stack trace:

06-16 01:26:43.062: E/AndroidRuntime(16712): FATAL EXCEPTION: main
06-16 01:26:43.062: E/AndroidRuntime(16712): Process: com.flaviofaria.kenburnsview.sample, PID: 16712
06-16 01:26:43.062: E/AndroidRuntime(16712): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.flaviofaria.kenburnsview.sample/com.flaviofaria.kenburnsview.sample.SingleImageActivity}: java.lang.NullPointerException
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.os.Handler.dispatchMessage(Handler.java:102)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.os.Looper.loop(Looper.java:136)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.ActivityThread.main(ActivityThread.java:5001)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at java.lang.reflect.Method.invokeNative(Native Method)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at java.lang.reflect.Method.invoke(Method.java:515)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at dalvik.system.NativeStart.main(Native Method)
06-16 01:26:43.062: E/AndroidRuntime(16712): Caused by: java.lang.NullPointerException
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.MathUtils.getRectRatio(MathUtils.java:44)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.RandomTransitionGenerator.generateRandomRect(RandomTransitionGenerator.java:93)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.RandomTransitionGenerator.generateNextTransition(RandomTransitionGenerator.java:64)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.KenBurnsView.startNewTransition(KenBurnsView.java:207)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.KenBurnsView.handleImageChange(KenBurnsView.java:280)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.KenBurnsView.setImageResource(KenBurnsView.java:126)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at com.flaviofaria.kenburnsview.sample.SingleImageActivity.onCreate(SingleImageActivity.java:36)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.Activity.performCreate(Activity.java:5231)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-16 01:26:43.062: E/AndroidRuntime(16712):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
06-16 01:26:43.062: E/AndroidRuntime(16712):    ... 11 more

解决方案

From the call stack, I'd say this is a bug in the library. It's not updating the mDrawableRect immediately after a new drawable is set.

Try changing the implementation of setImageResource() to add call updateDrawableBounds(), i.e.

@Override
public void setImageResource(int resId) {
    super.setImageResource(resId);
    updateDrawableBounds(); // <- added line
    handleImageChange();
}

Looks like this should fix the problem (but I haven't tested it).

EDIT Actually, all the setImage<X>() methods seem to have this issue. So the same fix should be used for setImageDrawable(), setImageBitmap(), and setImageURI().

NEWEST EDIT This is now fixed, according to @FlávioFaria himself. Just update to version 1.0.3.

这篇关于KenBurnsView如何设置图像资源?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆