1

我已经设置app:overlayImage了 drawable以SimpleDraweeView在. 设置属性正确显示图像上的波纹效果,但热点始终从中心显示。为了解决这个问题,我需要我在 xml 资源中设置的,但我没有找到任何方法来以编程方式将 overlayImage 可绘制设置为资源。xml layoutSimpleDraweeViewoverlayImageoverlayImage drawableSimpleDraweeView

如果我GenericDraweeHierarchy以编程方式进行准备,那么我可以准备 overlayImage 可绘制对象并可以为其设置触摸侦听器热点。代码片段:

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资源中设置的任何可绘制方法。

我试过但没有奏效:

  1. 用于获取和获取它的方法getTopLevelDrawable()getDrawable()方法 。SimpleDraweeViewdrawablesetHotSpot
  2. 通过设置ControllerListener并将hotSpot设置为获取的drawable来使用加载后图像的getTopLevelDrawable方法。SimpleDraweeView

如果我可以以任何其他方式添加热点,请告诉我。

4

1 回答 1

3

我努力在上面添加波纹覆盖Fresco SimpleDraweeView。我没有找到使涟漪效应正常工作的确切解决方案SimpleDraweeView,但我想出了两种添加工作涟漪效应的方法:

  1. 包裹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
            }
        })
    
  2. 扩展SimpleDraweeView并在其上绘制波纹drawable。以下解决方案由 github 上的“boxcounter”提供。检查以下自定义链接SimpleDraweeView,该链接在SimpleDraweeView.

我在Fresco 库问题页面上报告了同样的问题。希望它会尽快得到答复。

Fresco #912 问题更新:

几天前,我向 Fresco 提交了一个解决此问题的承诺。现在,com.facebook.fresco:fresco:0.11.0我们只需要将可绘制的波纹设置为app:overlayImage属性值,它就会完美地工作。

于 2016-01-19T16:20:42.973 回答