tôi có hai ImageButton, mỗi bên trong một RelativeLayout và hai RelativeLayouts này nằm trong một RelativeLayout khác, tôi muốn đặt TouchDelegate cho mỗi ImageButton. Nếu bình thường tôi thêm TouchDelegate vào mỗi ImageButton và nó là RelativeLayout mẹ thì chỉ một ImageButton hoạt động đúng, một cái khác không mở rộng vùng nhấp của nó. Vì vậy, xin vui lòng giúp tôi về cách sử dụng TouchDelegate trong cả hai ImageButtons. Nếu không thể, thì điều gì có thể là một cách hiệu quả để mở rộng vùng nhấp của chế độ xem? Cảm ơn trước ........Cách sử dụng nhiều TouchDelegate
Đây là mã xml của tôi:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/FrameContainer"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout android:layout_alignParentLeft="true"
android:id="@+id/relativeLayout3" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RelativeLayout android:layout_alignParentLeft="true"
android:id="@+id/relativeLayout1" android:layout_width="113dip"
android:layout_height="25dip">
<ImageButton android:id="@+id/tutorial1"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:src="@drawable/tutorial" />
</RelativeLayout>
<RelativeLayout android:layout_alignParentLeft="true"
android:id="@+id/relativeLayout2" android:layout_width="113dip"
android:layout_height="25dip" android:layout_marginLeft="100dip">
<ImageButton android:id="@+id/tutorial2"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:src="@drawable/tutorial"
android:layout_marginLeft="50dip" />
</RelativeLayout>
</RelativeLayout>
lớp Hoạt động của tôi:
import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.TouchDelegate;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;
public class TestTouchDelegate extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View mParent1 = findViewById(R.id.relativeLayout1);
mParent1.post(new Runnable() {
@Override
public void run() {
Rect bounds1 = new Rect();
ImageButton mTutorialButton1 = (ImageButton) findViewById(R.id.tutorial1);
mTutorialButton1.setEnabled(true);
mTutorialButton1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Toast.makeText(TestTouchDelegate.this, "Test TouchDelegate 1", Toast.LENGTH_SHORT).show();
}
});
mTutorialButton1.getHitRect(bounds1);
bounds1.right += 50;
TouchDelegate touchDelegate1 = new TouchDelegate(bounds1, mTutorialButton1);
if (View.class.isInstance(mTutorialButton1.getParent())) {
((View) mTutorialButton1.getParent()).setTouchDelegate(touchDelegate1);
}
}
});
//View mParent = findViewById(R.id.FrameContainer);
View mParent2 = findViewById(R.id.relativeLayout2);
mParent2.post(new Runnable() {
@Override
public void run() {
Rect bounds2 = new Rect();
ImageButton mTutorialButton2 = (ImageButton) findViewById(R.id.tutorial2);
mTutorialButton2.setEnabled(true);
mTutorialButton2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Toast.makeText(TestTouchDelegate.this, "Test TouchDelegate 2", Toast.LENGTH_SHORT).show();
}
});
mTutorialButton2.getHitRect(bounds2);
bounds2.left += 50;
TouchDelegate touchDelegate2 = new TouchDelegate(bounds2, mTutorialButton2);
if (View.class.isInstance(mTutorialButton2.getParent())) {
((View) mTutorialButton2.getParent()).setTouchDelegate(touchDelegate2);
}
}
});
}
}
Tôi đã cố gắng ghi đè getHitRect nhưng dường như nó không hoạt động (nó hoàn toàn không được gọi). Về cơ bản tôi tạo ra một cái nhìn tùy chỉnh mở rộng một ImageButton sau đó trong lớp tôi ghi đè lên getHitRect (với padding thêm) nhưng như tôi đã đề cập, getHitRect không bao giờ được gọi. Có thể đăng giải pháp của bạn không? – stephenteh
Hóa ra giải pháp mà tôi cung cấp không hoạt động trong ICS, đó có thể là lý do tại sao nó không hoạt động cho bạn. Tôi đã viết một bài đăng trên blog về hai chiến lược Liên đoàn đại biểu khác nhau http://www.brendanweinstein.me/2012/06/26/touchdelegate-and-gethitrect-making-buttons-with-expanded-touch-areas/ và bạn có thể lấy mẫu mã cho cả hai chiến lược tại https://github.com/brendanw/Touch-Delegates/blob/master/src/com/brendan/touchdelegates/MyTouchDelegate.java –
Điều này không trả lời câu hỏi OP. OP không cố thêm nhiều đại biểu vào một chế độ xem. Hai '' ImageButton''s trong ví dụ OP có * cha mẹ * khác nhau. – zyamys