ImageButton - 从图库中获取图像 - 将其设置为图像按钮 - (如何使按钮内的图像“粘住”?)

时间:2013-03-03 05:00:45

标签: android imagebutton

我遇到一个简单的问题并且已经四处寻找,但到目前为止还没有运气。 (音板类型应用 - 到目前为止只有一个按钮)

目前,我点击主屏幕上的“音板”按钮,它会导致我的单按钮试用音板 - 我在页面顶部有一个“添加图像”按钮。按钮下方是一个空白图像按钮(待填充)。点击“addimage”后,我被带到画廊,在那里我选择了一个图像。选择后,图像被设置为图像按钮中的背景(源变为背景)。经过多次试验和错误,我终于击倒了缩放问题(如果选择的图像很大,它会在按钮内爆炸)。

现在我的问题是让所选图像“粘住”按钮。如果我单击后退按钮返回到底栏上的主页或单击操作栏上的后退按钮(从音板页面)---然后返回到音板后---之前选择的图像设置为图像按钮不再存在(似乎图像按钮被重置或重新初始化)。 如果我去另一个页面或退出,有没有办法可以让选定的图像粘住并且不会擦除/清除?不确定如何处理

包含一段代码,用于将所选图像从图库设置到图像按钮并执行某种缩放。我无法发布图片......但我希望你能想象......非常简单。

谢谢!

PS:最终的目标是在原始文件夹中使用soundpool和一个小音频剪辑,并将其链接到上面的图像按钮 - 音频输出。

        ImageButton imagebutton = (ImageButton) findViewById(R.id.imBut);

        Bitmap bitmaporg = BitmapFactory.decodeFile(picturePath);
        bitmaporg = Bitmap.createScaledBitmap(bitmaporg,350,350,true);

        imagebutton.setImageBitmap(bitmaporg);

2 个答案:

答案 0 :(得分:0)

您可能希望在本地保存按钮的已调整大小的图像,以便以后使用。即使在关闭并重新开始之后。

这里发生的事情是正在初始化活动的新实例(带按钮),该实例没有关于应用于其他按钮实例的图像的信息。

你想要的是在初始化活动(活动的构造函数)时检查是否有图像保存(你只会保存),以及是否有应用图像。看到这个SO问题,它有一个很好的小巧的答案。 (您已经知道如何从给定路径获取数据)。

否则,如果您希望图像仅在运行之间保留,您可能希望将图像源保存为某个全局变量,然后您可以通过意图将图像源传递给新活动,或者直接在新活动中使用它,因为它已经是全局变量。

对于全局变量,您可能需要查看这些SO问题:

Android global variableAndroid: How to declare global variables?

答案 1 :(得分:0)

获取imagepath后尝试此操作,将包名替换为实际包名:

 try {
                BufferedWriter writer = new BufferedWriter(new FileWriter("/data/data/packagename/" + "filename.txt"));

                writer.write(picturePath);

                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

然后在使用imageview进行活动的onCreate中尝试:

ImageButton imagebutton = (ImageButton) findViewById(R.id.imBut);
try {
            BufferedReader inputReader = new BufferedReader(new FileReader("/data/data/packagename/"+ "filename.txt"));
            String inputString;
while ((inputString = inputReader.readLine()) != null) {
Bitmap bitmaporg = BitmapFactory.decodeFile(inputString);
    bitmaporg = Bitmap.createScaledBitmap(bitmaporg,350,350,true);

    imagebutton.setImageBitmap(bitmaporg);
}
        } catch (IOException e) {
            e.printStackTrace();
        }