suchen

Heim  >  Fragen und Antworten  >  Hauptteil

java - Was ist das Rendering-Abschlussereignis von View?

Problembeschreibung

Jetzt gibt es so ein einfaches Fragment:

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();
    }
    

Jetzt möchte ich einen Screenshot dieser Textansicht machen, wenn das Fragment gerade geladen wird. In welchem ​​Fall soll ich den Code einfügen?

Versuchen Sie es zu lösen

Ich habe es versuchttv.postDelayed()tv.post()以及tv.getViewTreeObserver().addOnPreDrawListener().

Posten Sie den Code, den Sie ausprobiert haben:

@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);

    }

Aber sie sind nicht erhältlich.

Frage

Welche Methode sollte also verwendet werden, um den Screenshot von tv korrekt zu erhalten?

(Übrigens wird das Fragment direkt übergeben FragmentTransaction.replace()显示的,而不是通过ViewPager, sodass der Lebenszyklus nicht unterbrochen werden sollte.)

Lösen Sie Ihre Zweifel!

迷茫迷茫2718 Tage vor895

Antworte allen(1)Ich werde antworten

  • 扔个三星炸死你

    扔个三星炸死你2017-06-10 09:50:47

    你说的这三种方法前两种都是可以的啊,最后一种有问题,应该是getViewTreeObserver().addOnGlobalLayoutListener()

    Antwort
    0
  • StornierenAntwort