怎样用java代码透过图片名设置linearlayout的背景图片
怎样用java代码通过图片名设置linearlayout的背景图片
我想在自定义Myview类的类文件中通过图片名给Main_Activity的linearlayout设置背景图片,图片存在drawable文件夹里,
public class MainActivity extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout in;
}
public void setbackgroundpicture(String imagename)
{
int resid=getResources().getIdentifier(imagename,"drawable","com.example.ybhy");
//in.setBackground(getResources().getDrawable(resid));
System.out.println(resid);
in.setBackgroundResource(resid);
}}
public class MyView extends View
{
MainActivity ay;
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
ay = (MainActivity) context;
...
}
public boolean onTouchEvent(MotionEvent event)
{
...
db=dbhelp.getReadableDatabase();
Cursor cur=db.rawQuery("select imgname from zipic where zi=?",new String[]{cs.toString()});
while(cur.moveToNext())
{
String picname=cur.getString(cur.getColumnIndex("imgname"));
System.out.println(picname);
ay.setbackgroundpicture(picname);//出错
}
...
}
}
数据库里取出的图片名字是有的
LOgcat里面出现下面的错误:
05-05 08:46:07.789: I/ System.out(8560): kou01
05-05 08:46:07.789: I/ System.out(8560): 2130837516
05-05 08:46:07.889: D/ dalvikvm(8560): GC_FOR_ALLOC freed 1690K, 17% free 19108K/22791K, paused 69ms
05-05 08:46:07.934: I/ dalvikvm-heap(8560): Grow heap (frag case) to 21.225MB for 2601952-byte allocation
05-05 08:46:08.168: D/ dalvikvm(8560): GC_CONCURRENT freed 17K, 15% free 21631K/25351K, paused 8ms+26ms
05-05 08:46:08.469: D/ AndroidRuntime(8560): Shutting down VM
05-05 08:46:08.469: W/ dalvikvm(8560): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
05-05 08:46:08.530: E/ AndroidRuntime(8560): FATAL EXCEPTION: main
05-05 08:46:08.530: E/ AndroidRuntime(8560): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
05-05 08:46:08.530: E/ AndroidRuntime(8560): at com.example.ybhy.MyView.onTouchEvent(MyView.java:207)
------解决方案--------------------
奇怪 为啥你放在res里的图片还要把信息存在数据库里?
直接用个数组或者放XML的Array里不就行了? 何必多此一举...
另外 每次触摸屏幕都要访问一次数据库...这...
我想在自定义Myview类的类文件中通过图片名给Main_Activity的linearlayout设置背景图片,图片存在drawable文件夹里,
public class MainActivity extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout in;
}
public void setbackgroundpicture(String imagename)
{
int resid=getResources().getIdentifier(imagename,"drawable","com.example.ybhy");
//in.setBackground(getResources().getDrawable(resid));
System.out.println(resid);
in.setBackgroundResource(resid);
}}
public class MyView extends View
{
MainActivity ay;
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
ay = (MainActivity) context;
...
}
public boolean onTouchEvent(MotionEvent event)
{
...
db=dbhelp.getReadableDatabase();
Cursor cur=db.rawQuery("select imgname from zipic where zi=?",new String[]{cs.toString()});
while(cur.moveToNext())
{
String picname=cur.getString(cur.getColumnIndex("imgname"));
System.out.println(picname);
ay.setbackgroundpicture(picname);//出错
}
...
}
}
数据库里取出的图片名字是有的
LOgcat里面出现下面的错误:
05-05 08:46:07.789: I/ System.out(8560): kou01
05-05 08:46:07.789: I/ System.out(8560): 2130837516
05-05 08:46:07.889: D/ dalvikvm(8560): GC_FOR_ALLOC freed 1690K, 17% free 19108K/22791K, paused 69ms
05-05 08:46:07.934: I/ dalvikvm-heap(8560): Grow heap (frag case) to 21.225MB for 2601952-byte allocation
05-05 08:46:08.168: D/ dalvikvm(8560): GC_CONCURRENT freed 17K, 15% free 21631K/25351K, paused 8ms+26ms
05-05 08:46:08.469: D/ AndroidRuntime(8560): Shutting down VM
05-05 08:46:08.469: W/ dalvikvm(8560): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
05-05 08:46:08.530: E/ AndroidRuntime(8560): FATAL EXCEPTION: main
05-05 08:46:08.530: E/ AndroidRuntime(8560): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
05-05 08:46:08.530: E/ AndroidRuntime(8560): at com.example.ybhy.MyView.onTouchEvent(MyView.java:207)
------解决方案--------------------
奇怪 为啥你放在res里的图片还要把信息存在数据库里?
直接用个数组或者放XML的Array里不就行了? 何必多此一举...
另外 每次触摸屏幕都要访问一次数据库...这...