gpt4 book ai didi

android - 如何在 View.DragShadowBuilder.onProvideShadowMetrics 中定位 Canvas

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:32 24 4
gpt4 key购买 nike

我有一个要求,可拖动 View 需要将阴影最初直接放置在 View 顶部 - 也就是说,它覆盖整个 View 而不是与触摸点相关。

我一直在尝试各种方法来使它与我的 View.DragShadowBuilder 子类一起使用,但没有成功。我希望使用 drawRect 允许我指定矩形点,以便将其绘制在与我的 View 相同的矩形中,但这导致没有 Canvas 被绘制。

但是,仅使用 canvas.drawColor(Color.CYAN) 绘制矩形,但相对于触摸点。

这是我使用 drawRect 的尝试:

    private class VideoDragShadowBuilder extends View.DragShadowBuilder {

public VideoDragShadowBuilder(View v) {
super(v);
}

@Override
public void onProvideShadowMetrics (Point size, Point touch) {
int width, height;

width = getView().getWidth();
height = getView().getHeight();

size.set(width, height);
touch.set(width / 2, height / 2);
}

@Override
public void onDrawShadow(Canvas canvas) {
//canvas.drawColor(Color.CYAN);

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setAlpha(45);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.CYAN);

canvas.drawRect(getView().getLeft(), getView().getTop(), getView().getRight(), getView().getBottom(), paint);
}
}

在这里,由于我触摸的位置,蓝色矩形与下面的 View 略微错位 - 我希望它完全覆盖 View ,无论用户触摸哪里。

enter image description here

最佳答案

这是我使用@pskink 的建议最终得到的解决方案。我根本不必使用 drawRect,关键是设置我以前没有的触摸点,因为我没有使用 onTouchEvent。为可能遇到相同问题的任何人添加此内容。

private Point lastTouch;

public DraggableFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);

dragListener = new View.OnLongClickListener() {

@Override
public boolean onLongClick(View v) {
View.DragShadowBuilder videoShadow = new DragShadowBuilder(v);
v.startDrag(draggableData, videoShadow, null, 0);
return true;
}
};
}

@Override
public boolean onTouchEvent (MotionEvent ev) {
lastTouch = new Point((int) ev.getX(), (int) ev.getY()) ;
return super.onTouchEvent(ev);
}

private class DragShadowBuilder extends View.DragShadowBuilder {

public VideoDragShadowBuilder(View v) {
super(v);
}

@Override
public void onProvideShadowMetrics (Point size, Point touch) {
super.onProvideShadowMetrics(size, touch);

// The touch point must be set in order for the canvas to properly fit the view
if (lastTouch != null) {
touch.set(lastTouch.x, lastTouch.y);
}
}

@Override
public void onDrawShadow(Canvas canvas) {
super.onDrawShadow(canvas);
canvas.drawColor(Color.CYAN);
}
}

关于android - 如何在 View.DragShadowBuilder.onProvideShadowMetrics 中定位 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28071080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com