onCreate在Android中调用了imageview的onClick

时间:2018-10-17 04:01:41

标签: android

我有调用RecorderService的ScreenRecorder活动。 RecorderService使用imageview设置浮动视图。当我在图像视图上onclick调用ScreenRecorder oncreate时,无法调用onclick动作。但是OnTouchListener可以正常工作

      <ImageView
    android:id="@+id/sr_float_home"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_marginTop="8dp"
    android:src="@drawable/recorder"
    android:onClick="startRecord"
    tools:ignore="ContentDescription"/>

ScreenRecorder活动

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate " );
     mProjectionManager = (MediaProjectionManager)
            getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
    } else {
        recordeScreen();
    }
    Log.d(TAG,"onCreate end");
}
private void recordeScreen() {
    Log.d(TAG, "recordeScreen open " );
    if (mMediaProjection == null) {
        startService(new Intent(ScreenRecorder.this, RecorderService.class));
        finish();
        return;
    }
    Log.d(TAG, "recordeScreen open end " );
}

 public void startRecord(){
 Log.d(TAG, "startRecord start " );
 startActivityForResult(mProjectionManager.createScreenCaptureIntent(),
         PERMISSION_CODE_SR);
 Log.d(TAG, "startRecord end " );
 finish();
 return;}

RecorderService

    @Override
public void onCreate() {
    super.onCreate();
    mChatHeadView = LayoutInflater.from(this).inflate(R.layout.activity_screen_recorder, null);
    mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    mWindowManager.addView(mChatHeadView, params);
    final ImageView srFloatHome = (ImageView) 
    mChatHeadView.findViewById(R.id.sr_float_home);
    srFloatHome.setOnTouchListener(new View.OnTouchListener() {
         @Override
        public boolean onTouch(View v, MotionEvent event) {
        }
        }
        }

我也尝试过放置onRecord之类的startRecord方法,但仍然无法正常工作。有人可以告诉我为什么未收到onclick呼叫的原因是oncreate的呼叫活动。

3 个答案:

答案 0 :(得分:2)

似乎您缺少startRecord函数上的参数。从Android documentation

  

公共静态最终int onClick

     

在此视图的上下文中单击该视图时要调用的方法的名称。该名称必须对应于一个公共方法,该方法只使用View类型的一个参数。例如,如果您指定android:onClick =“ sayHello”,则必须声明上下文(通常是Activity)的公共void sayHello(View v)方法

答案 1 :(得分:0)

也许您的代码少了xml中的属性。

android:clickable="true"

如果您希望ImageView具有clicked方法,则应添加此方法, 这是演示代码.xml:

<ImageView
    android:id="@+id/image"
    android:layout_width="100dp"
    android:layout_height="200dp"
    android:background="@android:color/background_dark"
    android:onClick="StartDoSomething"
    android:clickable="true"/>

.java中是

public void ButtonClick(View v){
    System.out.println("Do something here!");
}

希望能为您提供帮助。

答案 2 :(得分:0)

我使用了布局根元素,并使用了下面的代码,我可以在recordervices中获得点击

 mChatHeadView.findViewById(R.id.sr_float_home); 

表格

    final View srFloatHome =  mChatHeadView.findViewById(R.id.sr_head_root);

    srFloatHome.setOnClickListener(this);

我在RecorderService中的onclick方法

 public void startRecord(View v){}