Hi , i have a qustion about onTouch event, I have a layout that consist of 2 elements, a WebView and on top of it a TextView and then a custom view, that expand all over the screen and is transparent. With these i want to carch touch events and delegate to the correct widget either TextView or WebView depending on the touch event position (MoseEvent).
[code] <FrameLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/ res/ android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Type here:"/> <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/label"/> </RelativeLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/ res/ android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <com.frame.TransparentPanel android:id="@+id/ transparent_panel" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout> </FrameLayout> [/code] [code] public class TransparentPanel extends LinearLayout { private Paint innerPaint, borderPaint ; private List<PointF> pointsToDraw = new ArrayList<PointF>(); private WebView webview; private Paint touchPaint; public TransparentPanel(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TransparentPanel(Context context) { super(context); init(); } private void init() { touchPaint = new Paint(); touchPaint.setARGB(255, 0, 0, 255); touchPaint .setAntiAlias(true); touchPaint .setStyle(Style.STROKE); touchPaint .setStrokeWidth(2); innerPaint = new Paint(); innerPaint.setARGB(0, 100, 75, 75); //gray innerPaint.setAntiAlias(true); borderPaint = new Paint(); borderPaint.setARGB(255, 255, 255, 255); borderPaint.setAntiAlias(true); borderPaint.setStyle(Style.STROKE); borderPaint.setStrokeWidth(2); } public void setInnerPaint(Paint innerPaint) { this.innerPaint = innerPaint; } public void setBorderPaint(Paint borderPaint) { this.borderPaint = borderPaint; } @Override public boolean onTouchEvent(MotionEvent event) { int[] location = new int[2]; System.out.println("Event:"+event.toString()); webview.getLocationInWindow(location); System.out.println(webview.getTop()); System.out.println(webview.getLeft()); System.out.println(webview.getRight()); System.out.println(webview.getBottom()); System.out.println("Location:"+ String.valueOf(location [0]) +"," +String.valueOf(location[1])); if (event.getY()>=webview.getTop() && event.getY() <=webview.getBottom ()) { webview.onTouchEvent(event); } pointsToDraw.add(new PointF(event.getX(), event.getY ())); invalidate(); return true; } @Override protected void dispatchDraw(Canvas canvas) { RectF drawRect = new RectF(); drawRect.set(0,0, getMeasuredWidth(), getMeasuredHeight()); System.out.println(getMeasuredWidth()); System.out.println(getMeasuredHeight()); canvas.drawRoundRect(drawRect, 5, 5, innerPaint); Iterator<PointF> iterator = pointsToDraw.iterator(); while (iterator.hasNext()) { PointF p = iterator.next(); canvas.drawCircle(p.x, p.y, 5, touchPaint); } super.dispatchDraw(canvas); } public void setWebView(WebView webview) { this.webview = webview; } } [/code] Currently when the method webview.onTouchEvent(event); gets executed, the click over the webview is not correct. For example, if i'm looking at google.com.ar and touch near e letter Web link gets selected. Is there something about position, measurements i have to take into account when propagatin an event? Thanks -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

