相关疑难解决方法(0)

Android:将触摸事件委托给底层视图

我有以下层次结构:Activity- > PopupWindow- >CustomView

PopupWindow自己是一个方形,但透明,所以你可以看到活动坐在后台.这CustomView是一个嵌入PopupWindow内部的圆圈. 替代文字

到目前为止我取得的成就是

  1. 用户点击绿色圆圈,我调用"一些东西"
  2. 用户点击外部,PopupWindow触摸事件将被分派到活动.

现在缺少的部分是将PopupWindowCustomView(圆圈)内部发生的任何触摸事件发送到活动.

我已经知道如何感觉触摸是在我的圈子之外.我只是将它委托给Activity时遇到了问题.

在我,CustomView我有以下内容onTouch

if (radiusTouch > maxRadius) {
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在我的PopupWindow我已经设置了以下,但它永远不会被调用:

popup.setTouchInterceptor(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.i(TAG, "PopupWindow :: onTouch()");
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

还有什么我需要做的事情来将触摸事件一直委托给Activity?

events android touch

21
推荐指数
2
解决办法
1万
查看次数

绘制带圆角的LinearLayout

我正在尝试实现一个使用圆角绘制自己的LinearLayout子类.根据我的研究,我设置setWillNotDraw(false)并覆盖onDraw()在画布上绘制一个圆角矩形:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
            | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
    canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
    canvas.restoreToCount(sc);
}
Run Code Online (Sandbox Code Playgroud)

哪里:

drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
Run Code Online (Sandbox Code Playgroud)

DST_IN这里似乎是正确的选择(根据APIDemos示例),但应该是透明的区域(圆形的)具有黑色背景,并且子项的角仍然可见.这是使用Android 4.2.2的Galaxy Nexus的结果:

例

任何提示?

编辑:这是我想要实现的,抱歉photoshopping的粗糙:)

在此输入图像描述

编辑2:我向GitHub添加了一个可运行的示例项目:https://github.com/venator85/RoundClippingLayout

谢谢 ;)

android android-canvas

12
推荐指数
3
解决办法
3万
查看次数

标签 统计

android ×2

android-canvas ×1

events ×1

touch ×1