Fresco Android lib:无法设置热点" overlayImage" xml

时间:2016-01-14 09:22:55

标签: android android-layout fresco

我已在app:overlayImage的{​​{1}}设置了SimpleDraweeView drawable,用于在xml layout之上添加选择器涟漪效果。正确设置SimpleDraweeView属性会在图像上显示涟漪效应,但热点始终从中心显示。为了解决这个问题,我需要在xml资源中设置的overlayImage,但我没有找到任何方法可以通过编程方式将overlayImage drawable设置为overlayImage drawable资源。

如果我以编程方式准备SimpleDraweeView,那么我可以准备overlayImage drawable并可以设置触摸侦听器热点。代码段:

GenericDraweeHierarchy

但是我不想以编程方式创建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; } }); } ,因为我已经在xml中设置了不同的属性,并且不想更改它并以编程方式设置。请建议我在GenericDraweeHierarchy资源中设置overlayImage drawable的任何方法。

我尝试了但没有奏效:

  1. 使用的xml layoutgetTopLevelDrawable()方法 getDrawable()获取SimpleDraweeViewdrawable
  2. 图片后setHotSpot使用的getTopLevelDrawable方法     通过将ControllerListener设置为它并将hotSpot设置为来加载     获得了drawable。
  3. 如果我能以任何其他方式添加热点,请告诉我。

1 个答案:

答案 0 :(得分: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的{​​{3}} 效果位于SimpleDraweeView
  3. 之上

    我在link报告了同样的问题。希望很快得到答复。

    Fresco#912问题更新:

    几天前我向Fresco提交了修复此问题的提交。现在在com.facebook.fresco:fresco:0.11.0中,我们只需将ripple drawable设置为app:overlayImage属性的值,它就能完美运行。