java - Apakah acara penyiapan rendering View?
迷茫
迷茫 2017-06-10 09:48:47
0
1
892

Penerangan masalah

Kini terdapat Fragmen yang begitu mudah:

public class Level1Fragment extends Fragment {
    TextView tv;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup v=inflater.inflate(R.layout.activity_test,null);
        tv= (TextView) v.findViewById(R.id.level1_textview);
        tv.setText("啦啦啦");
        return v;
    }
    //给View截图,代码应该没有问题
    public static Bitmap convertViewToBitmap(View view){
        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.buildDrawingCache();
        return view.getDrawingCache();
    }
    

Sekarang, saya ingin mendapatkan tangkapan skrin TextView ini apabila Fragmen baru dimuatkan. Dalam acara manakah saya harus meletakkan kod tersebut?

Cuba selesaikan

Saya dah cubatv.postDelayed()tv.post()以及tv.getViewTreeObserver().addOnPreDrawListener().

Siarkan kod yang anda cuba:

@Override
    public void onResume() {
        super.onResume();
        tv.postDelayed(new Runnable() {
            @Override
            public void run() {
                final Bitmap bit=convertViewToBitmap(tv);
                //iv只是个简单的ImageView,与本问题无关
                iv.setImageBitmap(bit);
                iv.startAnimation(new AlphaAnimation(1,0));
            }
        },100);

    }

Tetapi mereka tidak boleh diperolehi.

Soalan

Jadi, apakah kaedah yang perlu digunakan untuk mendapatkan tangkapan skrin tv dengan betul?

(btw, Fragment dihantar terus FragmentTransaction.replace()显示的,而不是通过ViewPager, jadi kitaran hayat tidak boleh terganggu..)

Selesaikan keraguan anda!

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(1)
扔个三星炸死你

Dua kaedah pertama daripada tiga kaedah yang anda nyatakan adalah OK, tetapi terdapat masalah dengan yang terakhir, ia sepatutnya getViewTreeObserver().addOnGlobalLayoutListener()

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan