Help us understand the problem. What is going on with this article?

View関連のUtilメモ

More than 5 years have passed since last update.

View関連もよく使うもの

個人的メモ

  • Viewのメモリ解放促進(他に使うWidgetがあれば足して使う)
  • setBackgroundとsetBackgroundDrawableのSDKバージョンによる切り替え(SDK v11以前との切り分け)
  • dpとpxの変換
  • generateViewIdのAndroid4.2以前の下位互換実装
ViewUtil.java
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageButton;
import android.widget.SeekBar;


public class ViewUtil {
    public static final void cleanupView(View view) {
        if (view instanceof ImageButton) {
            ImageButton imageButton = (ImageButton) view;
            imageButton.setImageDrawable(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                imageButton.setBackground(null);
            } else {
                imageButton.setBackgroundDrawable(null);
            }
        } else if (view instanceof ImageView) {
            ImageView imageView = (ImageView) view;
            imageView.setImageDrawable(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                imageView.setBackground(null);
            } else {
                imageView.setBackgroundDrawable(null);
            }
        } else if (view instanceof SeekBar) {
            SeekBar seekBar = (SeekBar) view;
            seekBar.setProgressDrawable(null);
            seekBar.setThumb(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                seekBar.setBackground(null);
            } else {
                seekBar.setBackgroundDrawable(null);
            }
        }

        if (view instanceof ViewGroup) {
            ViewGroup viewGroupg = (ViewGroup) view;
            int size = viewGroupg.getChildCount();
            for (int i = 0; i < size; i++) {
                cleanupView(viewGroupg.getChildAt(i));
            }
        }
    }

    public static final void setBackgroundDrawable(View view, Drawable drawable) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(drawable);
        } else {
            view.setBackgroundDrawable(drawable);
        }
    }

    public static final int dpToPx(Context context, int dip) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dip * scale + 0.5f);
    }

    public static final int pxToDp(Context context, int px) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (px / scale);
    }

    private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);

    public static int generateViewId() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            for (;;) {
                final int result = sNextGeneratedId.get();
                int newValue = result + 1;
                if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
                if (sNextGeneratedId.compareAndSet(result, newValue)) {
                    return result;
                }
            }
        } else {

           return View.generateViewId();

        }
    }
}

参考

viewの解放
http://dorodoro.info/tip/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF%E3%81%AE%E5%9B%9E%E9%81%BF%E3%82%92%E3%81%99%E3%82%8B/

Hoshi_7
お仕事ください!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away