It should be possible to have your tooltip ‘pointing’ at your data point. To achieve this a number of steps would be required.
Firstly, I’d start by replacing the standard tool tip with a custom one, with a View which you provide. You could start by using a simple TextView. You could use these methods to help with this:
You could then create a custom view which would have the arrow. Of course, a View typically is square or rectangular in shape, with more complex shapes being possible by parts of the view being invisible, by means of transparent pixels. You could replace your previous TextView with your new arrow view. I would expect the arrow point to be right up to one edge of your view. For example an arrow pointing down would have it’s tip at the same vertical position as the view’s bottom.
You could make the ‘arrow’ ‘point’ at the chosen data point simply repositioning the centre point of your tool tip. So for example if you wanted the tooltip to be above the data point, with the arrow pointing downward, you would need the centre point of the tooltip to move upward by a number of pixels which represent half of the total height of the View.
This can be achieved by implementing the following listener to intercept the chain of events before the tool tip is drawn:
As you can see, you are given the dataPointPosition, which represents in data terms the visual position of the data point closest to the user gesture. The axis offers a convenience method which should help you covert from data values to pixel values:
Once you have this pixel value, you should be able to apply a suitable offset, to adjust the centre position of your tooltip.
You can then transform this new value back to data terms, using this method:
Finally, you can apply this new value to your tool tip:
I hope this helps,