Android 如何获取弹出窗口的图形缓存?

Android 如何获取弹出窗口的图形缓存?,android,nullpointerexception,popupwindow,Android,Nullpointerexception,Popupwindow,我有一个弹出窗口在我的片段,我想采取绘图缓存的弹出窗口。 我尝试过这个(下面),但是我得到了空指针异常。我找不到原因。有人能帮忙吗 LayoutInflater inflater2 = (LayoutInflater) obj.getSystemService(LAYOUT_INFLATER_SERVICE); View customView_2 = inflater2.inflate(R.layout.share_lc_card, null);

我有一个弹出窗口在我的片段,我想采取绘图缓存的弹出窗口。 我尝试过这个(下面),但是我得到了空指针异常。我找不到原因。有人能帮忙吗

 LayoutInflater inflater2 = (LayoutInflater)         obj.getSystemService(LAYOUT_INFLATER_SERVICE);
        View customView_2 = inflater2.inflate(R.layout.share_lc_card, null);


       // results_page_ = (RelativeLayout) v.findViewById(R.id.fragment_results_layout);
        card_main_layout = (RelativeLayout) customView_2.findViewById(R.id.card_main_layout);

         card_main_layout.invalidate();
                    card_main_layout.requestLayout();
                    card_main_layout.setDrawingCacheEnabled(true);
                    card_main_layout.buildDrawingCache(true);
                    Bitmap drawingCache_bitmap_card  = card_main_layout.getDrawingCache();
                 //   Bitmap drawingCache_bitmap_card = Bitmap.createBitmap(card_main_layout.getDrawingCache());
                    card_main_layout.setDrawingCacheEnabled(false);
                    Log.e("gu", "hghh");


My popup window xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="300dp"
    android:layout_height="450dp"
    android:layout_margin="4dp"
    android:padding="30dp"
    card_view:cardCornerRadius="26dp"
    card_view:cardElevation="10sp"
    card_view:cardUseCompatPadding="true">

    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="450dp">

        <ImageView
            android:id="@+id/background_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/lc_background" />

        <TextView
            android:id="@+id/first_name_textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="80dp"
            android:layout_marginStart="80dp"
            android:layout_marginTop="30dp"

            android:text="@string/romeo" />

        <TextView
            android:id="@+id/and_symbol"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="130dp"
            android:layout_marginStart="130dp"
            android:layout_marginTop="30dp"
            android:text="@string/and" />


        <TextView
            android:id="@+id/second_name_textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="145dp"
            android:layout_marginStart="145dp"
            android:layout_marginTop="30dp"
            android:text="@string/juliet" />

        <ImageView
            android:id="@+id/small_heart_image_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="90dp"
            android:layout_marginStart="90dp"
            android:layout_marginTop="50dp"
            android:src="@drawable/heart_share_card" />

        <TextView
            android:id="@+id/result_message"
            android:layout_width="200dp"
            android:layout_height="100dp"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="40dp"
            android:layout_marginStart="40dp"
            android:layout_marginTop="120dp"
            android:gravity="center"
            android:lineSpacingExtra="-2dp"
            android:text="WOW ! MADE FOR EACH OTHER"
            android:textSize="25dp" />

        <ImageView
            android:id="@+id/small_heart_image_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="100dp"
            android:layout_marginLeft="90dp"
            android:layout_marginStart="90dp"
            android:src="@drawable/heart_share_card" />

        <TextView
            android:id="@+id/score_textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="80dp"
            android:layout_marginLeft="110dp"
            android:layout_marginStart="110dp"
            android:text="90/100" />
    </RelativeLayout>


</android.support.v7.widget.CardView>
例外情况

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object refe    at android.graphics.Bitmap.createBitmap(Bitmap.java:737)
 at tech.a.com.x.LC_Fragments.ResultsFragment$4.onClick(ResultsFragment.java:207)
 at android.view.View.performClick(View.java:5184)
 at android.view.View$PerformClick.run(View.java:20910)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:145)
 at android.app.ActivityThread.main(ActivityThread.java:5951)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
当应用程序尝试使用具有空值的对象引用时抛出

首先,确保Imageview不是空的

        img_Obj.buildDrawingCache();
        Bitmap image = img_Obj.getDrawingCache();
阅读

createBitmap(Bitmap source, int x, int y, int width, int height)
 card_main_layout = (RelativeLayout) customView_2.findViewById(R.id.card_main_layout);
问题

createBitmap(Bitmap source, int x, int y, int width, int height)
 card_main_layout = (RelativeLayout) customView_2.findViewById(R.id.card_main_layout);
解决方案1

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/lc_background">

下面我已经创建了一个弹出窗口,方法是点击弹出窗口的按钮,从弹出窗口创建位图,请检查下面的方法和XML

方法:java

PopupWindow popupWindow = null;
Bitmap bitmap = null;


 private void popUp() {
            LayoutInflater layoutInflater
                    = (LayoutInflater) getBaseContext()
                    .getSystemService(LAYOUT_INFLATER_SERVICE);

            View popupView = layoutInflater.inflate(R.layout.popup_window, null);
            popupWindow = new PopupWindow(
                    popupView,
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);

            Button btnDismiss = (Button) popupView.findViewById(R.id.dismiss);
            btnDismiss.setOnClickListener(new Button.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    try {
                        View view = popupWindow.getContentView();
                        view.setDrawingCacheEnabled(true);
                        view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
                        view.buildDrawingCache();
                        bitmap = Bitmap.createBitmap(view.getDrawingCache());
                        view.setDrawingCacheEnabled(false);
                        view.destroyDrawingCache();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    imageView.setImageBitmap(bitmap);
                    popupWindow.dismiss();
                }
            });

            popupWindow.showAsDropDown(button, 50, -30);
        }
XML-popup_window.XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/rootView"
    android:background="@android:color/background_light"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="1dp"
        android:background="@android:color/darker_gray"
        android:orientation="vertical">
        >
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:orientation="vertical">
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="It's a PopupWindow" />
            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_menu_share" />
            <Button
                android:id="@+id/dismiss"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Dismiss" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

>

为了显示创建的位图,我在主布局中使用了一个图像视图

Hai,谢谢。我已经试过了,但是位图image=img_Obj.getDrawingCache(),此位图为空。:很抱歉响应太晚。我已解决此问题,请与我们联系。