findViewById在自定义视图中为“mImageView”和“mCropOverlayView”返回“null”。
public class CropImageView extends FrameLayout {
private ImageView mImageView;
private CropOverlayView mCropOverlayView;
public CropImageView(@NonNull Context context) {
super(context);
init(context);
}
public CropImageView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CropImageView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
View view = inflate(getContext(), R.layout.crop_image_view, this);
mImageView = view.findViewById(R.id.img_crop);
mCropOverlayView = view.findViewById(R.id.overlay_crop);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
public void setImageBitmap(Bitmap bitmap) {
mImageView.setImageBitmap(bitmap);
mCropOverlayView.setBitmap(bitmap);
}
public void crop(CropListener listener, boolean needStretch) {
if (listener == null)
return;
mCropOverlayView.crop(listener, needStretch);
}
}
这是自定义视图的XML文件我想在自定义视图中扩展它。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_crop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
<com.wildma.idcardcamera.cropper.CropOverlayView
android:id="@+id/overlay_crop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/img_crop" />
</RelativeLayout>
你好@Syed Arsalan Kazmi
我创建了一个演示来快速测试你的问题findViewById()的值不是空。屏幕快照:http://prntscr。com/1sdnvuh
Android支持lib SDK 30
您的代码可以编译。
最好阅读并尝试练习您使用的库的演示。(也许你有了新的想法)
https://github。com/wildma/IDCardCamera/blob/master/README_EN。md
https://github。com/wildma/IDCardCamera/tree/master/app###What发生的情况是,inflation()不附加膨胀的视图,如果最后一个参数不为空,它返回那个值。最简单的修复方法是传递null而不是这个:
View view = inflate(getContext(), R.layout.crop_image_view, null);
返回的视图将是RelativeLayout。你可能想把它添加到你的视图层次结构中:
addView(view);