我在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用于获取drawablesetHotSpot
图像后使用getTopLevelDrawableSimpleDraweeView方法
    通过设置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”提供了以下解决方案。校验
在自定义SimpleDraweeViewlink之后显示波纹
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/

10-10 01:45
查看更多