I made some 9 patch images to use as a button, but the device doesn't recognize them.
9 patch image:
How eclipse shows it:
How my device shows it:
As you can see, the english button has two black pixels at the top and slovenian only has one. I did this to try if two pixels would work, but it still didn't.
I'm pretty sure I did everything right. Names are in the right format (name.9.png)
Your problem is that your right border is not continuous. The right border defines the padding, and must be a continuous line (or a single pixel). You seem to simply have the logic inverted, but it should be like this instead:
9-patch images have to be pre-compiled, when the one pixel border is removed and encoded to a PNG chunk. Your image is not being pre-compiled. That's why the black pixels still appear, and the image is not being correctly stretched.
Make sure your images are in one of the drawable folders, and their name ends with .9.png. If everything is right, try to clean and build your project.
Related
Dear Fellow Developers,
I've ran into the problem shown in the attached picture. We have been trying to tweak the dropdown menu's 9patch image provided by a graphics designer, but could not get it to work. The black stretch markers are not being hidden, and Android does not stretch it the way we would expect.
The device is a Nexus 7. We have tried several various image sizes, but none seemed to work. I am also attaching a copy of the 9patch.
What could be wrong?!
This happens:
Here is the 9patch
If the image has been created in a normal image editor rather than the android 9 patch tool, it could be just that its not done exactly right.
The image must have a 1px transparent border other than where the black lines are. Make sure its completely transparent and is only 1 px thick
Also I don't think you can have split lines (like you have down the left and right side of the image, I think they must be one solid line on each side)
I've made this 9-patch png and added it to the res/drawable folder:
It works nice in the example eclipse shows:
But on the emulator it looks messed up:
Why is this happening and how can I fix this?
EDIT: The border on which I've placed the black dots is white, not transparent. Not sure if that's got anything to do with it...
This probably happens because you have a small mistake with the black pixels you have set.
Try to re-cut the edges of the picture and to add the black pixels all over again.
I had this problem too once and this helped me.
if the border is white then this is your problem it has to be pure black or nothing at all.
UPDATE: Try this image:
It seems you are not saved your image with .9.png
In order to make it work do like this
save your image in the following format in your drawable folder
yourimage.9.png (not png format of your image)
Check this reference draw 9 patch
The Android SDK contains a 9-patch editing tool (draw9patch.bat) that can help you to produce and/or validate 9-patch images. Without it, it is very easy to make a mistake in defining your border.
The one-pixel border should be transparent except for the black pixels that define the various parts of the image to be treated differently during scaling.
I've created several 9-patch images using the android draw9patch utility and I've yet to make one that works. On one image I've got 2 dots on the top edge, and 2 dots on the left edge; the 'show bad patches' button shows no bad patches, and the samples on the right side look fine. However, in the app the image appears with the black 9patch dots showing on the top and right sides.
Are we suppose to set the backgroundColor or cachecolor to hide the dots in the imageview?
I'm targeting google maps 2.3.3. Could there be known issues with this API?
What is the full name that you gave to the file? The file name must end in ".9.png" to work properly. Otherwise it will be treated as a normal png file which would display the dots and lines at the edges of the image.
Those dots will go away when they're displayed on the phone. They tell the Android System what parts of the image can be stretched without warping how it's supposed to look. If you notice the format of the 9patch is .9.png, there's preprocessing that Android does before the image is displayed and the dots are removed. 'Show Bad Patches' rarely makes a difference I've found, even if they're considered 'bad' they work how I want them too. At least in my experiences. Just add the 9patches to your activity and reference them as you normally would
Update
Wait a second. Are you trying to use 9patches as images to be displayed in an ImageView? That's not what 9patches are for. 9patches are stretchable images for buttons or other UI elements (i.e. for different screen sizes) so developers can have one image to stretch and fit the different sized buttons instead of one for each size. Android displays most image formats in ImageView. If you're displaying the 9patches with an ImageView, Android isn't preprocessing the black dots as slices of that image that are repeatable, it's just displaying the whole thing.
I need express help with 9 patch. I run draw9patch and change and save as name.9.png and save at res/drawable ( later tried in res/drawable-hdpi but didn't help) but problem is when I show on devic/emilator it doesn't strech and that black pixels at border are still visible ( I thought it is visible only inside 9patch for creating intersection ). Can somebody told me what is wrong ? I saved as name.9.png but it seems like it not recognize like 9.patch
Ensure transparency is not set in the outer pixel border that sets the patches. The Draw9Patch tool accepts it so it looks correct but it never actually works in my experience.
Ensure your 9patch image is named like this: imageName.9.png
after I found out (sadly) that there is no easy way to create a simple border around a View, I was forced to use the 9-patch-image approach to get a border around my View.
So I read the short thing there is on the 9-patch and its easy enough to understand. I started the "Draw 9-patch" application that came with the Android SDK, opened up a very simple image I created in Paint and then... I got stuck.
According to the page (http://developer.android.com/guide/developing/tools/draw9patch.html) I should be able to define those areas where the image can be expanded and so on, just by clicking on the edges ("Click within the 1-pixel perimeter to draw the lines that define the stretchable patches...").
So I try to do just that and absolutely nothing happens. I try to hold down SHIFT when clicking and also do the rigth-mouse-click, and nothing happens. When I move the mouse away from the 1-pixel perimiter I get a grey-and-red "marquee" (stripes).
Bottom line is: nothing happens no matter what I do.
The tool definitely works, but make sure the image you create first does NOT have the .9.png extension. If it does, the draw9patch tool will assume the 1 pixel perimeter of your image is already setup as 9-patch. If you open an image with just a .png extension, the tool will add the 1 pixel perimeter and you will be able to manipulate it as described, and save it as 9-patch when you're done.
The 9-patch tool is a bit awkward to use, but it does work. I believe you need to left click and drag around the edge to paint the outside border.
Alternatively, you can use any image editor and create a one pixel empty border around it, and draw in the following:
Top/Left = black pixels for the area of the image that can be grown or shrunk as needed. For a typical border, it is everything except for the curved corners
Bottom/Right = black pixels for the small snippet that should be repeated if the image needs to be grown in that direction.
You must use a non-8bit png file to create a .9.png file, or it can not be edit.
In my case, I can convert a 8-bit png to 9-patch file with Android Studio successfully, but I can't edit it anyway.
When I export the origin psd to normal png file, and convert it to 9-patch file, the 9-patch borders ban be edit now!