如何将图像按钮的大小调整为与源图像完全相同的大小?

时间:2012-05-13 10:07:38

标签: android android-layout android-widget imagebutton

我以编程方式创建了一组ImageButton视图(透明背景)作为我的应用程序中定义的静态地图(ImageView)上的地图图钉。在地图上的某些位置,有一些彼此非常接近的ImageButton。我注意到在这种情况下,即使我点击按钮1,应用程序也会认为按钮2被点击,因此继续运行与按钮2相关的活动。关闭这些按钮的透明度显示按钮实际上是比相关的源图像大得多,因此其中一些按钮重叠。

如何定义图像按钮,使其尺寸与源图像的尺寸相同?

以下是onCreate()下相关代码的快照:

    ImageButton btnMapLoc = new ImageButton(ResultMapActivity.this);
    RelativeLayout.LayoutParams vp = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    vp.setMargins(x,y,0,0);  // [left, top, right, bottom] - in pixels
    btnMapLoc.setLayoutParams(vp);
    //btnMapLoc.setBackgroundColor(Color.TRANSPARENT);
    btnMapLoc.requestLayout();

    String imgNameNormal = "map_loc_" + mapLocation + "_normal"; //e.g. map_loc_10_normal
    int idNormal = getResources().getIdentifier(imgNameNormal,"drawable",getPackageName());
    String imgNameClick = "map_loc_" + mapLocation + "_click"; //e.g. map_loc_10_click
    int idClick = getResources().getIdentifier(imgNameClick,"drawable",getPackageName());
    btnMapLoc.setImageResource(idNormal);
    rl.addView(btnMapLoc, vp);

    // Change image as the state of the button changed (normal vs. clicked)
    StateListDrawable states = new StateListDrawable();
    states.addState(new int[] {-android.R.attr.state_pressed},getResources().getDrawable(idNormal)); // Note the "-"
    states.addState(new int[] {android.R.attr.state_pressed},getResources().getDrawable(idClick));
    btnMapLoc.setImageDrawable(states);

感谢。

2 个答案:

答案 0 :(得分:3)

试试这个,它对我有用。

Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.testbild);            

ImageButton btnMapLoc = (ImageButton) findViewById(R.id.imageButton1);        
LayoutParams lp = new LayoutParams(image.getWidth(), image.getHeight());
btnMapLoc.setLayoutParams(lp);

btnMapLoc.setImageBitmap(image);

答案 1 :(得分:1)

我只想使用ImageView,这与默认情况下的图片大小完全相同。或者ImageButton可以做什么,ImageView不能做什么?