ImageView正在重新调整大小,同时在其上绘制边框形状

时间:2013-12-06 11:35:54

标签: android imageview android-canvas layer shape

这是我的shape_two文件,我把它放在我的drawable文件夹中。

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<solid android:color="#00FFFFFF" />

<stroke
    android:width="3dp"
    android:color="#00ff00" />

</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);

}

这里tempview是我的ImageView,drble是另一个drawable,我在另一层使用。此代码没有任何错误消息正常工作。

我的问题是当我在ImageViews上绘制形状时,它会重新调整大小(更改高度和宽度)。我有不同大小的imageView,我想使用单一形状的xml绘制边框,我的ImageView大小不应该这样做。任何人都可以告诉我如何实现它。

在搜索了很多东西之后我才知道我不能对它进行位图操作,根据形状重新调整大小,因为xml文件不是位图。我在某地读到这个问题可以通过使用canvas解决,但是怎么做..

更新:

我观察到,虽然更改图层onsingletap只有高度增加而不是ImageView的宽度。如果我的布局有4个ImageView,那么第一次只在不同的imageView上单击,所有imageView重新调整大小一次。之后,如果我们再次点击 - 再没有什么可以重新调整大小。 我想在第一次在ImageView重新设置视图上设置图层,然后调整自己。我不知道为什么会发生这种情况。

我为我的所有布局应用相同的代码,对于某些布局,它的工作正常,有些则不是。

我的尝试。

  1. 我尝试过使用GradientDrawable制作边框图片

     GradientDrawable gd = new GradientDrawable();
         gd.setStroke(3, Color.GREEN);
         gd.setSize(drble.getBounds().width(), drble.getBounds().height());
         gd.setColor(0xff424242);
    
  2. 我的另一个尝试是在画布上绘制图像,

  3. 将边框图像放在可绘制文件夹中,根据ImageView高度和宽度重新调整它的大小,并将其转换为drawable并进行设置。
  4. 我还试图减少内部图像大小和边框位图大小是图像视图的大小,也是它的反面。
  5. 每件事都给我相同的结果。

    更新

    请仔细阅读我的回答,你可能会找到很好的搜索点并获得+50。

3 个答案:

答案 0 :(得分:3)

经过多次挣扎,用了很多方法,花了一天一夜的时间进行搜索,最终我找到了这三条线的解决方案。

    ld.setBounds(0, 0, tempView.getWidth(), tempView.getHeight());
    ld.setLayerInset(0, 0, 1, 0, 1);
    ld.setLayerInset(1, 0, 0, 0, 0);

如果您仍然有重新调整大小的问题,请在形状xml布局中添加一些填充。这可能会节省一些时间。

答案 1 :(得分:0)

为什么要使用该功能绘制边框?你试过直接在布局中分配它吗?

<ImageView 
 android:background="@drawable/shape_two"
...
/>

更新

如果您需要动态添加或删除边框,可以使用

tempView.setBackgroundDrawable(R.drawable.shape_two);//to add it
tempView.setBackgroundDrawable(null);//to remove it

答案 2 :(得分:0)

请查看此解决方案link

您需要添加一个框架laout并在其上创建一个ImageView,并在框架布局上执行边框操作。

同时为图像视图保留一些边距,以便可见背景框布局。