我有调用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的呼叫活动。
答案 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){}