在Activity中创建一个LinearLayout,创建一个scrollHorizon对象(scrollHorizon继承自ViewGroup),在scrollHorizon中调用createLayout函数来加载myView(继承自View)对象,然后调用deleteAllView函数来删除所有的视图。

scrollHorizon代码:

public class scrollHorizon extends ViewGroup {private Context context;public scrollHorizon(Context context) {super(context);this.context = context;createLayout();deleteAllView();}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {int childCount = this.getChildCount();int childLeft = 0;int childTop = 0;for(int i = 0; i < childCount; i++){View child = getChildAt(i);child.setVisibility(View.VISIBLE);child.measure(r - l, b - t);child.layout(childLeft, childTop, childLeft + child.getMeasuredWidth(),childTop + child.getMeasuredHeight());if(childLeft <= 320){childLeft = childLeft + child.getMeasuredWidth();}else{childLeft = 0;childTop = childTop + child.getMeasuredHeight();}}}public void createLayout(){Resources resource = this.getResources();PackageManager pmanager = context.getPackageManager();final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);                mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);                        List list = pmanager.queryIntentActivities(mainIntent, 0);                    for( int i = 0; i < list.size(); i++){                  int icon = R.drawable.contacts_button_normal;                  LinearLayout linear = new LinearLayout(context);                  linear.setLayoutParams(new LayoutParams(45, 45));                  linear.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.icon));                          ImageView image2 = new ImageView(context);                  image2.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.icon));                  Drawable drawable = resource.getDrawable(icon);                          ImageView image = new ImageView(context);                          image.setBackgroundDrawable(drawable);                  linear.addView(image2);                  linear.addView(image);                  this.addView(linear);               }}public void deleteAllView(){int size = this.getChildCount();for( int i = 0; i < size; i++){this.removeViewAt(i);}}}

myView代码:

public class myView extends View {public myView(Context context) {super(context);setLayoutParams(new LayoutParams(40,40));}}


主Activity代码:

public class scrollHorizonTest extends Activity {           public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                LinearLayout linear = new LinearLayout(this);                scrollHorizon horizon = new scrollHorizon(this);              linear.addView(horizon);                 this.setContentView(linear);    }}


显示结果:



如果不调用deleteAllView函数,那程序没有问题,可以正常的进行显示,但调用deleteAllView函数存在空指针异常。

原因为:当你删除掉第一个View后(假设总共有两个View),当前ViewGroup的子视图只有一个,而这个子视图的位置变为0,所以当你调用removeViewAt(1)时会出现空指针异常,正确的删除方法应该是将deleteAllView函数中的removeViewAt(i)修改为removeViewAt(0);

更多相关文章

  1. Android之Service组件
  2. 【Android界面实现】Starting an Activity(Activity生命周期金字
  3. 第三部分 MediaPlayer的主要实现分析
  4. Android(安卓)studio 权限问题
  5. Android(安卓)如何通过menu id来得到menu item 控件--binbinyang
  6. 《Android(安卓)对话框大全》 方法超简单
  7. java.lang.StackOverflowError
  8. Android——Mediaplay 框架调用
  9. android--(布局ListView、优化、刷新分页、ArrayAdapter、Simple

随机推荐

  1. Android的用户
  2. android退出应用程序
  3. Android(安卓)7.0 后拍照和相册选择
  4. Android(安卓)ART 垃圾回收 机制&算法
  5. Android(安卓)源代码编译前后的目录结构
  6. Windows下用Git下载android源码
  7. android:windowSoftInputMode属性使用
  8. Android(安卓)build system note
  9. 设置TextView文字居中
  10. Android(安卓)控件之ProgressBar进度条