我设置了app:overlayImage
可在 SimpleDraweeView
上绘制在xml layout
用于在 SimpleDraweeView
之上添加选择器波纹效果.设置overlayImage
属性正确显示图像上的波纹效果,但热点始终从中心显示。为了解决这个问题,我需要 overlayImage drawable
我在 xml 资源中设置,但我没有找到任何方法将 overlayImage 可绘制对象设置为 SimpleDraweeView
以编程方式资源。
如果我准备GenericDraweeHierarchy
以编程方式然后我可以准备 overlayImage 可绘制对象并可以为其设置触摸监听器热点。代码 fragment :
SimpleDraweeView image = (SimpleDraweeView) findViewById(R.id.image);
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(mContext.getResources());
Drawable overlayImage = getDrawable(R.drawable.image_selector);
builder.setOverlay(overlayImage);
image.setHierarchy(builder.build());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.setOnTouchListener(new View.OnTouchListener() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onTouch(View v, MotionEvent event) {
if (overlayImage != null) {
overlayImage.setHotspot(event.getX(), event.getY());
}
return false;
}
});
}
但我不想创建GenericDraweeHierarchy
以编程方式,因为我已经在 xml 中设置了不同的属性,不想更改它并以编程方式设置。请提出任何获取overlayImage
的方法我在 xml layout
中设置的可绘制对象资源。
我试过但没有成功:
- 用过
getTopLevelDrawable()
和getDrawable()
的方法SimpleDraweeView
获得drawable
和setHotSpot
- 用过
getTopLevelDrawable
SimpleDraweeView
的方法|后像 通过将 ControllerListener 设置为它并设置 hotSpot 来加载 获得可绘制对象。
如果我可以通过任何其他方式添加热点,请告诉我。
最佳答案
我努力尝试在 Fresco SimpleDraweeView
上添加波纹叠加层。
我没有找到使涟漪效果在 SimpleDraweeView
上正常工作的确切解决方案,但我想出了两种添加工作涟漪效果的方法:
将
SimpleDraweeView
包裹在FrameLayout
中并设置android:foreground
属性到FrameLayout
。添加android:clickable
属性到FrameLayout
或添加点击监听器 给它。代码 fragment :<FrameLayout android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height"wrap_content" android:foreground="@drawable/ripple_selector" android:clickable="true"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/image" android:layout_width="20dp" android:layout_height="20dp"/> </FrameLayout>
为
FrameLayout
容器设置点击监听器:findViewById(R.id.id/image_container).setOnClickListener(new View.OnClicklistener() { @Override public void onClick(View v) { // Do your stuff } })
- 扩展
SimpleDraweeView
并在其上绘制波纹drawable
。 以下解决方案由 github 上的“boxcounter”提供。查看 以下 link对于显示波纹的自定义SimpleDraweeView
在SimpleDraweeView
之上的效果。
我在 Fresco library issue page 上报告了同样的问题.希望尽快得到答复。
Fresco #912 问题更新:
几天前,我向 Fresco 提供了解决此问题的 promise 。现在,在 com.facebook.fresco:fresco:0.11.0
中,我们只需将 ripple drawable 设置为 app:overlayImage
属性的值,它就会完美地工作。
关于android - Fresco 安卓库 : Not able to set hotspot on "overlayImage" drawable set in xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785738/