This is my shape_two file which i put in my drawable folder.
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#00FFFFFF" />
<stroke
android:width="3dp"
android:color="#00ff00" />
</shape>
this is my code to draw shape
private void drawLayer(ImageView tempView, Drawable drble, int wherecall) {
Drawable drawableRes = getResources()
.getDrawable(R.drawable.shape_two);// loadDrawable(R.drawable.shape_two);
int h = tempView.getMeasuredHeight();
int w = tempView.getMeasuredWidth();
drawableRes.setBounds(0, 0, w, h);
Drawable[] drawableLayers = { drble, drawableRes };
ld = new LayerDrawable(drawableLayers);
if (wherecall != 3) {
tempView.setBackground(ld);
} else {
tempView.setImageDrawable(ld);
}
td = new TransitionDrawable(drawableLayers);
td.setCrossFadeEnabled(true);
}
here tempview is my ImageView and drble is another drawable which i am using on another layer. This code don't have any error message working fine.
My problem is when i draw shape on my ImageViews it get re-size(change height and width). i have different size of imageView and i want to use single shape xml to draw border and my ImageView size should not change while doing so. How to achieve it can anyone tell me.
After searching to many things i came to know i can't perform bitmap operations on it to re-size it according to shape because xml file is not a bitmap. I read somewhere that this issue can be resolve by using canvas but how do it..
UPDATE:
I observe that while change layer onsingletap only height is increasing not width of the ImageView. If my Layout have 4 ImageView so on click first time only on different imageView, All imageView re-size once. After that if we click again-again nothing get re-size. I think on setting layer on ImageView re-size view for fist time, then it adjusted itself.I don't know why is this happening.
I am applying same code for my all layout and for some layout its working fine and for some its not.
What i have tried yet.
I have tried make border image by GradientDrawable
GradientDrawable gd = new GradientDrawable();
gd.setStroke(3, Color.GREEN);
gd.setSize(drble.getBounds().width(), drble.getBounds().height());
gd.setColor(0xff424242);
My another try was draw image on canvas,
Every thing give me same result.
UPDATE
Please go through my answer, you may found good point to search and get +50.
After struggled a lot, used so many ways and spending a day and night in searching finally i found my solution in these three lines.
ld.setBounds(0, 0, tempView.getWidth(), tempView.getHeight());
ld.setLayerInset(0, 0, 1, 0, 1);
ld.setLayerInset(1, 0, 0, 0, 0);
If still you have problem of re-sizing imageView give some padding in your shape xml layout.This may save someones time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With