1

上にセレクターのリップル効果を追加するために、app:overlayImageドローアブルをオン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