为什么我不能将ImageView的图像替换为这个简单的Android应用程序?

时间:2016-05-14 17:45:51

标签: java android android-layout imageview

我正在使用Android进行第一次实验,我在这个简单的应用程序中遇到了以下问题。

基本上我的应用程序包含 ImageView ,显示背景图像, TextView 显示消息和按钮。

当用户点击此按钮时,我的TextView文本必须更改,我的 * ImageView 的背景图像也必须更改。

这是我的 activiy_main.xml 文件,其中包含我的主要活动的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#B388FF"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/android_cookie_image_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="centerCrop"
        android:src="@drawable/before_cookie" />

    <TextView
        android:id="@+id/status_text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp"
        android:text="I'm so hungry"
        android:textColor="@android:color/white"
        android:textSize="34sp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:text="EAT COOKIE"
        android:onClick="eatCookie"/>

</LinearLayout>

这是上一个活动的代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void eatCookie(View v) {

        TextView messaggio = (TextView) findViewById(R.id.status_text_view);
        messaggio.setText("I'm so full");

        ImageView sfondo = (ImageView) findViewById(R.id.android_cookie_image_view);
        sfondo.setImageDrawable(Drawable.createFromPath("@drawable/after_cookie"));

    }
}

正如您所看到的,当用户点击按钮时,它会执行首先检索 TextView 引用的 eatCookie()方法并更改此的TextView 即可。它工作正常。

然后它检索与 ImageView 相关的引用,并尝试更改已查看的immage,我已经通过这一行完成了它:

sfondo.setImageDrawable(Drawable.createFromPath("@drawable/after_cookie"));

在我的项目中,我已将 after_cookie.jpg 文件放入 / res / drawable / 文件夹中。

问题在于它无法运作。 android_cookie_image_view 的默认图像会消失,但不会被 after_cookie.jpg 图像替换。

有什么问题?我错过了什么?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

改用它。

 ImageView sfondo = (ImageView) findViewById(R.id.android_cookie_image_view);
 sfondo.setImageDrawable(getResources().getDrawable(R.drawable.after_cookie));
  

并确保在eatCookie上调用onCreate函数。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        eatCookie();
    }

答案 1 :(得分:0)

试试这个

sfondo.setImageDrawable(getResources().getDrawable(R.drawable.after_cookie));