Android开发中,如何在静态类中使用getResources()获取图片资源.
主Activity:publicclassMainActivityextendsActivity{PicActivityDraw;@Overrideprotectedvo...
主Activity:
public class MainActivity extends Activity {
PicActivity Draw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Draw = new FaceActivity(this);
setContentView(Draw); //新建surfaceview
}
......//省略菜单创建
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case MENU_EYES:
FaceActivity.LoadPic();
break;
}
return super.onOptionItemSelected(item)
}
}
==================================
PicActivity
public class FaceActivity extends SurfaceView implements SurfaceHolder.Callback {
public FaceActivity(Context context) {
super(context);
this.getHolder().addCallback(this);
paintPic = new Paint();
paintPic.setAntiAlias(true);
this.LoadPic();
}
protected static void LoadPic() {
paintPic = new Paint();
imagecl = BitmapFactory.decodeResource(getResources(), R.drawable.cl);
imagecr = BitmapFactory.decodeResource(getResources(), R.drawable.cr);
}
......
}
我想通过第一个Activity里面的菜单,调用第二个java里面的LoadPic函数,利用switch方法(还没写代码)加载不同的图片.
但是eclipse提示我,LoadPic要是static才能被第一个Activity调用,而改成静态之后,getResources()方法就不能使用,也就读不出图片了.
求解,应该怎么办!~ 展开
public class MainActivity extends Activity {
PicActivity Draw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Draw = new FaceActivity(this);
setContentView(Draw); //新建surfaceview
}
......//省略菜单创建
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case MENU_EYES:
FaceActivity.LoadPic();
break;
}
return super.onOptionItemSelected(item)
}
}
==================================
PicActivity
public class FaceActivity extends SurfaceView implements SurfaceHolder.Callback {
public FaceActivity(Context context) {
super(context);
this.getHolder().addCallback(this);
paintPic = new Paint();
paintPic.setAntiAlias(true);
this.LoadPic();
}
protected static void LoadPic() {
paintPic = new Paint();
imagecl = BitmapFactory.decodeResource(getResources(), R.drawable.cl);
imagecr = BitmapFactory.decodeResource(getResources(), R.drawable.cr);
}
......
}
我想通过第一个Activity里面的菜单,调用第二个java里面的LoadPic函数,利用switch方法(还没写代码)加载不同的图片.
但是eclipse提示我,LoadPic要是static才能被第一个Activity调用,而改成静态之后,getResources()方法就不能使用,也就读不出图片了.
求解,应该怎么办!~ 展开
展开全部
获取resource需要context对象,所以你这个问题有如下几个解决思路
1,使用Context作为参数,例如public static getResourcesStatic(Context context, int resId)
2,使用Context作为成员变量,在构造函数中接受一个Context参数,并赋值给自己成员变量
这样在此对象生命期内,都可以使用.
不过并不推荐这种做法,因为传入的Context多数情况下是Activity,往往会附着很多资源,如背景图片等,无法GC,导致过高的内存占用.可以用下面的改进方式:
3,使用WeakReference<Context>保存context的弱引用
使用时要注意判断ref.get()是否为null
1,使用Context作为参数,例如public static getResourcesStatic(Context context, int resId)
2,使用Context作为成员变量,在构造函数中接受一个Context参数,并赋值给自己成员变量
这样在此对象生命期内,都可以使用.
不过并不推荐这种做法,因为传入的Context多数情况下是Activity,往往会附着很多资源,如背景图片等,无法GC,导致过高的内存占用.可以用下面的改进方式:
3,使用WeakReference<Context>保存context的弱引用
使用时要注意判断ref.get()是否为null
推荐于2016-05-13
展开全部
和静态、动态无关,写法如
类名..class.getResource(name)
在android,方法的参数传入当前的实例
类名..class.getResource(name)
在android,方法的参数传入当前的实例
追问
imagecl = BitmapFactory.decodeResource(getResources(), R.drawable.cl);
里面decodeResource(Resources res, int id),用类名.class.getResource(name)获取的是一个URL.
我还是不清楚怎么样让imagecl获取图片!~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询