LoginSignup
31

More than 5 years have passed since last update.

View関連のUtilメモ

Last updated at Posted at 2014-07-17

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/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31