簡體   English   中英

從BaseActivity-XML包含ImageView后,未調用Android中的onTouchListener()

[英]onTouchListener() in Android not called after including ImageView from BaseActivity-XML

以下代碼顯示了一個抽象的Activity(AppActivity),其他Activity必須從中擴展。 已經定義了一個布局,但是只繼承了一個圓形按鈕(擴展了ImageView),僅繼承了一個布局。

MainActivity定義了自己的布局,其中必須包含前面提到的按鈕。 查看我當前的結果,成功繼承並顯示了Button,不能為null

但是,從“ MainActivity”的角度永遠不會調用附加到此ImageView的onTouchListener()。 請注意,如果MotionEvent.ACTION_DOWN和UP發生,我將返回true。 因此,這不能成為原因。 有什么建議么?

使用CircleButton的抽象活動(擴展了ImageView),包括onTouchListener()

public abstract class AppActivity extends Activity {

    public CircleButton circleButton;

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

        circleButton = (CircleButton) findViewById(R.id.voiceControlBtn);

        circleButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.i("TOUCH", "");
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    ButtonGotPressed();
                    return true;
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    circleButton.ButtonGotReleased();
                    return true;
                }
                return false;
            }
        });
}

從AppActivity擴展的活動

  public class MainActivity extends AppActivity implements ICadeCommand {

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

activity_main.xml(用於MainActivity)

<RelativeLayout .../>

    <include layout="@layout/voice_btn_layout" />

</RelativeLayout>

voice_btn_layout.xml(用於AppActivity)

    <FrameLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:layout_margin="15dip"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="true">

            <packagename.CircleButton
                ...
                android:scaleType="fitXY"/>

    </FrameLayout>

您正在R.layout.voice_btn_layoutcircleButton設置OnTouchListener

MainActivity調用setContentView()時,將布局R.layout.voice_btn_layout替換為eu.alfred.batterywarnerapp.R.layout.activity_main 因此, onTouch()用於方法circleButtonAppActivity不叫,因為circleButton在屏幕上示出的是不一樣的circleButtonAppActivity

您可以通過在AppActivity添加額外的一行來測試是否確實如此

public abstract class AppActivity extends Activity {

public CircleButton circleButton;

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

    circleButton = (CircleButton) findViewById(R.id.voiceControlBtn);
    circleButton.setVisibility(View.GONE);     // ADD THIS LINE 
    circleButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        ...

您應該注意, circleButton仍然可見,從而表明屏幕上顯示的circleButtonAppActivity那個不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM