我在app:overlayImage
中的SimpleDraweeView
上设置了xml layout
drawable,以在SimpleDraweeView
顶部添加选择器波纹效果。设置overlayImage
属性可正确显示图像上的波纹效果,但始终从中心显示热点。为了解决这个问题,我需要在xml资源中设置的overlayImage drawable
,但是我找不到任何以编程方式将overlayImage drawable设置为SimpleDraweeView
资源的方法。
如果我以编程方式准备GenericDraweeHierarchy
,那么我可以准备overlayImage drawable并可以为其设置触摸监听器热点。程式码片段:
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
或添加点击侦听器
对此。程式码片段:
<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
容器的clicklistener:findViewById(R.id.id/image_container).setOnClickListener(new View.OnClicklistener() {
@Override
public void onClick(View v) {
// Do your stuff
}
})
扩展
SimpleDraweeView
并在其顶部绘制波纹drawable
。github上的“ boxcounter”提供了以下解决方案。校验
在自定义
SimpleDraweeView
的link之后显示波纹SimpleDraweeView
顶部的效果。我在Fresco library issue page上报告了相同的问题。希望能尽快得到答复。
壁画#912问题更新:
几天前,我向Fresco提交了一份可解决此问题的承诺。现在在
com.facebook.fresco:fresco:0.11.0
中,我们只需要将涟漪可绘制设置为app:overlayImage
属性的值即可,并且可以完美地工作。关于android - Fresco Android库:无法在xml中设置的“overlayImage”可绘制对象上设置热点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34785738/