【问题标题】:How to size imagebutton to exactly the same size as its source image?如何将 imagebutton 的大小设置为与其源图像完全相同的大小?
【发布时间】:2012-05-13 10:07:37
【问题描述】:

我以编程方式创建了一组 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);

谢谢。

【问题讨论】:

    标签: android android-layout android-widget imagebutton


    【解决方案1】:

    试试这个,它对我有用。

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

    【讨论】:

    • 谢谢。这行得通!顺便说一句,您对如何实现双击操作来进行简单缩放有什么建议吗?我已经发布了问题,但还没有回复...link to question here
    • 希望我的回答对你有所帮助,并不完美,抱歉
    【解决方案2】:

    我会简单地使用ImageView,默认情况下它与其中的图像大小完全相同。或者有什么你需要ImageButton 可以做而ImageView 不能做的事情吗?

    【讨论】:

    • 按钮有 onClick() 动作来开始一个新的活动。请参阅上面的解决方案。还是谢谢。
    • ImageView也有setOnClickListener,不过还可以
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多