anroid反射实例

来源:互联网 发布:2017网络效应的答案 编辑:程序博客网 时间:2024/06/08 10:28

经过分析发现,该图片是ListView超类AbsListView的一个成员mFastScroller对象的成员mThumbDrawable。这里mThumbDrawable是Drawable类型的。mFastScroller是FastScroller类型,这个类型比较麻烦,类的声明没有modifier,也就是default(package),只能供包内的类调用。

因此反射代码写的稍微麻烦一些:


try {

    Field f = AbsListView.class.getDeclaredField("mFastScroller");
    f.setAccessible(true);
    Object o=f.get(listView);
    f=f.getType().getDeclaredField("mThumbDrawable");
    f.setAccessible(true);
    Drawable drawable=(Drawable) f.get(o);
    drawable=getResources().getDrawable(R.drawable.icon);
    f.set(o,drawable);
    Toast.makeText(this, f.getType().getName(), 1000).show();
} catch (Exception e) {
    throw new RuntimeException(e);

}



  • //用反射机制来获取资源中的图片ID和尺寸  
  •             Field[] fields = R.drawable.class.getDeclaredFields();  
  •             for (Field field : fields)  
  •             {  
  •                 if (!"icon".equals(field.getName()))//除了icon之外的图片  
  •                 {     
  •                     int index=field.getInt(R.drawable.class);  
  •                     //保存图片ID  
  •                     imgList.add(index);  
  •                     //保存图片大小  
  •                     int size[]=new int[2];  
  •                     Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);  
  •                     size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();  
  •                     imgSizes.add(size);  
  •                 }  
  •             }


  • 原创粉丝点击