Did anyone ever fill out a bug report for this? I can confirm it as
well. I think it can safely be described as a "defect."

The most significant issue is that of the conflicting flag on those
touch up events. I can confirm that the video is exactly accurate.

So, the next questions --

How should a developer even verify whether the hardware supports
multitouch accurately, if it returns the second point when it's not
accurate? (I've seen at least one app do a "calibration" test to
verify it's not working.)

Is there any workaround to try to filter this out?

Has anyone heard status on this issue from, say, Motorola or Google
engineers? The threads I saw seem to suggest people are unaware of the
issue (even though it's a fundamental hardware-firmware issue),
meaning we'd better get on that bug report.

On the other hand, it really becomes a device bug, not a platform bug.

Peter

On Jan 29, 6:03 pm, Mario Zechner <[email protected]> wrote:
> Thanks, i stubled upon your blog today and already found a lot of
> usefullcodethere. I guess that's how you arrived at this post :)
>
> It's kind of a sad situation really. I'd love to use android to it's
> full potential but it seems that some things aren't just where they
> should be yet. Never the less, android is the way to go!
>
> On 29 Jan., 20:46, luke <[email protected]> wrote:
>
>
>
> > All these bugs (and several more you may not have discovered yet, e.g.
> > event noise on touch up/down) are covered in excruciating detail on my
> > blog,http://lukehutch.wordpress.com/android-stuff.  The main posts
> > you will want to read are:
>
> >http://lukehutch.wordpress.com/2009/01/10/full-working-multitouch-on-......
>
> > These are hardware / firmware limitations and it is actually
> > impossible to overcome them on current hardware/firmware.  Some could
> > possibly be fixed with a firmware update from synaptics though this
> > probably won't happen (e.g. partially raising a touch point up loses
> > one of X or Y but not the other) and some of the bugs will not be
> > fixed without new hardware (the fact it's a 2x1D device and not a 2D
> > device).
>
> > --
> > Luke Hutchison
>
> > On Jan 28, 7:06 pm, Mario Zechner <[email protected]> wrote:
>
> > > It seems Toon Warz, another game usingmultitouchalso has some issues
> > > on N1 and Droid. Can others confirm the problem with thecodeposted
> > > above? Did anyone arrive at a solution? This is a pretty bad situation
> > > for game developers as nothing freaks users more out than bad
> > > controls. I think thecodeabove is even a democodefrom the android
> > > framework so i find it kinda strange that the problem didn't pop up
> > > during their testing phase. I also couldn't find any information on
> > > the logcat output telling me about the drop of a bad pointer.
>
> > > On 23 Jan., 19:39, mzechner <[email protected]> wrote:
>
> > > > I can confirm this problem using the samplecodeabove, my owncode
> > > > and playing multipong. I created two videos, one showing the problem
> > > > for the samplecodeabove and one showing it in multipong.
>
> > > >http://www.youtube.com/watch?v=865cd2Ui0Co(samplecode)http://www.yout...)
>
> > > > Each time thepointergo crazy LogCat displays messages tagged
> > > > "InputDevice" saying "droppingbadpointer#0", in all 3 cases (sample
> > > >code, mycode, multipong). ThepointerIds get mixed up, and as can be
> > > > seen in the video for the samplecodeabove the x coordinate for the
> > > > secondpointeris wrong. I have a suspicion that this might be a
> > > > driver related bug. In any way it makes writting games withmultitouch
> > > > impossible.
>
> > > > The bug can be reproduced by quickly tapping around and then settle
> > > > with 2 digits on the screen. It does not work always but often enough
> > > > to be annoying in a game with a dual analog stick setup on screen
> > > > (like in mycode).
>
> > > > I hope this gets fixed asap. If more people can confirm this i file a
> > > > bug athttp://b.google.com/
>
> > > > On 15 Jan., 21:32, Mirmathrax <[email protected]> wrote:
>
> > > > > here is in the original text from the post, this explains how to make
> > > > > the bug occur:
>
> > > > >  1)  Touch screen with finger 1 and start doodling
> > > > >      2)  Without removing finger 1, touch screen with finger 2 and
> > > > > start doodling
> > > > >      3)  Remove finger 1 from the screen (without removing finger 2)
> > > > >      4)  Replace finger 1 on the screen and start doodling again
> > > > > (never remove finger 2)
> > > > >      5)  Voila, you will see the bug.  The drawn lines for finger 1
> > > > > will suddeny connect to finger 2.
>
> > > > > This is because  there is a bug when the first finger is placed back
> > > > > down again, the event only has points for the wrong finger!  Even
> > > > > though finger 1 went back down at a new location, thecodethinks for
> > > > > some reason that finger 2 is the one that went back down (but it never
> > > > > went up).
>
> > > > > -Colin
>
> > > > > On Jan 15, 2:35 pm, rollbak <[email protected]> wrote:
>
> > > > > > Can you please explain which the issue is?
>
> > > > > > On Jan 15, 1:09 pm, Mirmathrax <[email protected]> wrote:
>
> > > > > > > Multi-touch API is bugged (at least on Motorola Droid). Here is a
> > > > > > > method to reproduce the error for analysis:
>
> > > > > > > 1)  Create a new android project in Eclipse with the following 
> > > > > > > fields:
>
> > > > > > >  Project name:           PointerLocation
> > > > > > >  Build target:              Android 2.0.1
> > > > > > >  Application Name:     PointerLocation
> > > > > > >  Package Name:        com.example.pointerlocation
> > > > > > >  Create Activity:         PointerLocation
>
> > > > > > > 2)  Copy the followingcodeand paste this into the
> > > > > > > PointerLocation.java file that is automatically created
>
> > > > > > > /*
> > > > > > >  * Copyright (C) 2007 The Android Open Source Project
> > > > > > >  *
> > > > > > >  * Licensed under the Apache License, Version 2.0 (the "License");
> > > > > > >  * you may not use this file except in compliance with the 
> > > > > > > License.
> > > > > > >  * You may obtain a copy of the License at
> > > > > > >  *
> > > > > > >  *      http://www.apache.org/licenses/LICENSE-2.0
> > > > > > >  *
> > > > > > >  * Unless required by applicable law or agreed to in writing, 
> > > > > > > software
> > > > > > >  * distributed under the License is distributed on an "AS IS" 
> > > > > > > BASIS,
> > > > > > >  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > > > > > implied.
> > > > > > >  * See the License for the specific language governing 
> > > > > > > permissions and
> > > > > > >  * limitations under the License.
> > > > > > >  */
>
> > > > > > > package com.example.pointerlocation;
>
> > > > > > > import android.app.Activity;
> > > > > > > import android.content.Context;
> > > > > > > import android.graphics.Canvas;
> > > > > > > import android.graphics.Paint;
> > > > > > > import android.graphics.Paint.FontMetricsInt;
> > > > > > > import android.os.Bundle;
> > > > > > > import android.util.Log;
> > > > > > > import android.view.MotionEvent;
> > > > > > > import android.view.ViewConfiguration;
> > > > > > > import android.view.WindowManager;
> > > > > > > import android.view.VelocityTracker;
> > > > > > > import android.view.View;
>
> > > > > > > import java.util.ArrayList;
>
> > > > > > > /**
> > > > > > >  * Demonstrates wrapping a layout in a ScrollView.
> > > > > > >  *
> > > > > > >  */
> > > > > > > public class PointerLocation extends Activity {
> > > > > > >     @Override
> > > > > > >     protected void onCreate(Bundle icicle) {
> > > > > > >         super.onCreate(icicle);
> > > > > > >         setContentView(new MyView(this));
>
> > > > > > >         // Make the screen full bright for this activity.
> > > > > > >         WindowManager.LayoutParams lp = 
> > > > > > > getWindow().getAttributes();
> > > > > > >         lp.screenBrightness = 1.0f;
> > > > > > >         getWindow().setAttributes(lp);
> > > > > > >     }
>
> > > > > > >     public static class PointerState {
> > > > > > >         private final ArrayList<Float> mXs = new 
> > > > > > > ArrayList<Float>();
> > > > > > >         private final ArrayList<Float> mYs = new 
> > > > > > > ArrayList<Float>();
> > > > > > >         private boolean mCurDown;
> > > > > > >         private int mCurX;
> > > > > > >         private int mCurY;
> > > > > > >         private float mCurPressure;
> > > > > > >         private float mCurSize;
> > > > > > >         private int mCurWidth;
> > > > > > >         private VelocityTracker mVelocity;
> > > > > > >     }
>
> > > > > > >     public class MyView extends View {
> > > > > > >         private final ViewConfiguration mVC;
> > > > > > >         private final Paint mTextPaint;
> > > > > > >         private final Paint mTextBackgroundPaint;
> > > > > > >         private final Paint mTextLevelPaint;
> > > > > > >         private final Paint mPaint;
> > > > > > >         private final Paint mTargetPaint;
> > > > > > >         private final Paint mPathPaint;
> > > > > > >         private final FontMetricsInt mTextMetrics = new 
> > > > > > > FontMetricsInt
> > > > > > > ();
> > > > > > >         private int mHeaderBottom;
> > > > > > >         private boolean mCurDown;
> > > > > > >         private int mCurNumPointers;
> > > > > > >         private int mMaxNumPointers;
> > > > > > >         private final ArrayList<PointerState> mPointers
> > > > > > >                  = new ArrayList<PointerState>();
>
> > > > > > >         public MyView(Context c) {
> > > > > > >             super(c);
> > > > > > >             mVC = ViewConfiguration.get(c);
> > > > > > >             mTextPaint = new Paint();
> > > > > > >             mTextPaint.setAntiAlias(true);
> > > > > > >             mTextPaint.setTextSize(10
> > > > > > >                     * getResources().getDisplayMetrics().density);
> > > > > > >             mTextPaint.setARGB(255, 0, 0, 0);
> > > > > > >             mTextBackgroundPaint = new Paint();
> > > > > > >             mTextBackgroundPaint.setAntiAlias(false);
> > > > > > >             mTextBackgroundPaint.setARGB(128, 255, 255, 255);
> > > > > > >             mTextLevelPaint = new Paint();
> > > > > > >             mTextLevelPaint.setAntiAlias(false);
> > > > > > >             mTextLevelPaint.setARGB(192, 255, 0, 0);
> > > > > > >             mPaint = new Paint();
> > > > > > >             mPaint.setAntiAlias(true);
> > > > > > >             mPaint.setARGB(255, 255, 255, 255);
> > > > > > >             mPaint.setStyle(Paint.Style.STROKE);
> > > > > > >             mPaint.setStrokeWidth(2);
> > > > > > >             mTargetPaint = new Paint();
> > > > > > >             mTargetPaint.setAntiAlias(false);
> > > > > > >             mTargetPaint.setARGB(255, 0, 0, 192);
>
> ...
>
> read more »

-- 
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

Reply via email to