2012-09-03 18 views
24

tôi vừa thêm một thư mục có thể kéo mới trong thư mục res. Trong thư mục drawable, tôi đã sao chép tập tin ic_launcher.png từ thư mục drawable-hdpi. Tôi muốn thay đổi hình ảnh ImageButton chuẩn thông qua hình mới khi tôi nhấn nút. Tôi đã viết một số mã, nhưng khi tôi bắt đầu ứng dụng nó bị treo.android Imagebutton thay đổi Hình ảnh OnClick

Button imgButton; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    findViewById(R.id.imgButton).setOnClickListener(imgButtonHandler);  
} 

View.OnClickListener imgButtonHandler = new View.OnClickListener() { 

    public void onClick(View v) { 

     imgButton.setBackgroundResource(R.drawable.ic_launcher); 

    } 
}; 

EDIT: Tôi đã thay đổi điều này và điều này cũng không hoạt động.

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

    imgButton = (Button) findViewById(R.id.imgButton); 
    imgButton.setOnClickListener(imgButtonHandler); 
} 


View.OnClickListener imgButtonHandler = new View.OnClickListener() { 

    public void onClick(View v) { 
     imgButton.setBackgroundResource(R.drawable.ic_launcher); 

    } 
}; 

CHỈNH SỬA 2: CÔNG TRÌNH NÀY. Cảm ơn tất cả.

ImageButton button; 

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

    button= (ImageButton)findViewById(R.id.imgButton); 
    button.setOnClickListener(imgButtonHandler); 
} 


View.OnClickListener imgButtonHandler = new View.OnClickListener() { 

    public void onClick(View v) { 
     button.setBackgroundResource(R.drawable.ic_launcher); 

    } 
}; 
+0

Bạn nên dán ở đây lỗi của bạn từ logcat. – hsz

+0

NullpointerException coz imgButton là null ... bạn có thể truyền Xem v sang Nút hoặc đặt imgButton sau setContentView ... – Selvin

+0

Chỉnh sửa của bạn là câu trả lời của tôi và hoạt động! – Carnal

Trả lời

6

Đó là vì imgButton là rỗng. Hãy thử điều này thay vì:

findViewById(R.id.imgButton).setBackgroundResource(R.drawable.ic_action_search); 

hoặc dễ dàng hơn để đọc:

imgButton = (Button) findViewById(R.id.imgButton); 
imgButton.setOnClickListener(imgButtonHandler); 

sau đó trong onClick: imgButton.setBackgroundResource(R.drawable.ic_action_search);

+0

Không .. ok, tôi đã chỉnh sửa ngay bây giờ. Nó không hoạt động với ic_launcher.png – user1205415

+0

findViewById (R.id.imgButton) .setBackgroundResource (R.drawable.ic_launcher); Hà ... điều này đã làm việc. Khi tôi bắt đầu nó, nó có hình ảnh mới. Sau đó, tôi không hiểu, tại sao mã trên không hoạt động trong onClick? – user1205415

+0

Nó không hoạt động vì bạn có Button imgButton; tuyên bố .. nhưng bạn không bắt đầu một lượt xem, đó là lý do tại sao. Khi sử dụng findViewById (...) bạn sẽ có được cái nhìn của Button (Button trong trường hợp này), do đó nó hoạt động. – Carnal

1

Bạn đã nút assing để imgButton biến của bạn:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imgButton = (Button) findViewById(R.id.imgButton); 
    imgButton.setOnClickListener(imgButtonHandler); 
} 
3

Bạn có thể làm điều đó ngay trong tệp XML của mình:

android:onClick="@drawable/ic_action_search" 
+0

OK, nhưng khi nào tôi nhấn nút lần nữa, tôi muốn hình ảnh cũ. Giống như nút chuyển đổi. – user1205415

+2

nhưng làm điều này không thay đổi hình ảnh thay vì làm hỏng hoạt động với nhật ký ** 'java.lang.IllegalStateException: Không thể tìm thấy phương thức res/drawable-hdpi/menu_mission_touch.png (Xem) trong lớp hoạt động com.test.MainMenu đối với trình xử lý onClick trên lớp xem android.widget.ImageButton có id 'menu_mission' '** –

+0

thì không thể! – Jorgesys

49

này misleaded tôi một chút - nó phải được "setImageResource" thay vì "setBackgroundResource" :) !!

Sau đây hoạt động tốt:

ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);  
btn.setImageResource(R.drawable.actions_record); 

khi khi sử dụng setBackgroundResource hình ảnh thực tế của ImageButton ở lại trong khi hình ảnh nền được thay đổi phù thủy dẫn đến một xấu xí tìm ImageButton đối tượng

Cảm ơn.

+0

Chính xác; làm 'setBackgroundResource' dường như kéo giãn hình ảnh để vừa với nút, vì vậy nó sẽ bị méo. – KickingLettuce

+0

làm việc tuyệt vời ..... –

9
<ImageButton android:src="@drawable/image_btn_src" ... /> 

image_btn_src.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/icon_pressed"/> 
<item android:state_pressed="false" android:drawable="@drawable/icon_unpressed"/> 
</selector>