最近调试更换主界面背景功能,虽然还没有达到想要的任意选择图片功能,但是已经可以选择更换内置图片作为背景,记录一下。
首先需要注意的几点:
1、paperAdapter需要重写的几个函数不可以漏
@Override
public Object instantiateItem(ViewGroup container, int position)
{
container.addView(mImageViews.get(position));
return mImageViews.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object)
{
container.removeView(mImageViews.get(position));
}
@Override
public boolean isViewFromObject(android.view.View view, Object object) //这里可能是因为import的原因,需要用android.view.View
{
return view == object;
}
@Override
public int getCount()
{
return mImgIds.length;
}
2、获取图片的序号
需要在viewPaper的OnPageChangeListener中获取,通过paperAdapter中的函数很难获取当前position;
mViewPager.setOnPageChangeListener(new OnPageChangeListener(){
@Override
public void onPageSelected(int arg0) {
nLastPos = arg0;//这个就是当前选择的图片
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
System.out.println("onPageScrolled = " + arg0 + ", " + arg1 + ", " + arg2);
}
@Override
public void onPageScrollStateChanged(int arg0) {
System.out.println("onPageScrollStateChanged = " + arg0);
}
});
3、通过intent将获取的图片ID传给主活动,主活动设置为背景
btSetBg.setOnClickListener(new OnClickListener(){
@Override
public void onClick(android.view.View v)
{
// TODO Auto-generated method stub
if(nLastPos > mPagerAdapter.getCount()-1)
{
nLastPos = 0;
}
Intent intent = new Intent();
intent.putExtra("bg_resId", mImgIds[nLastPos]);
setResult(RESULT_OK, intent);
finish();
}
});
主活动中重写onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case 1:
if (data == null || "".equals(data))
{
return;
} else if (resultCode == RESULT_OK)
{
int bgResId = data.getIntExtra("bg_resId", 1);
findViewById(R.id.main_layout).setBackgroundResource(bgResId);
saveBgImg(bgResId);
}
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
4、 保存及读取背景的ID号,下次启动设置相应的背景
public void saveBgImg(int imgId)
{
SharedPreferences.Editor editor = getSharedPreferences(LOUYU_DATA_REC,
Context.MODE_PRIVATE).edit();
// 步骤2-2:将获取过来的值放入文件
editor.putInt("bg_imgId", imgId);
// 步骤3:提交
editor.commit();
}
public int getBgId()
{
// 步骤1:创建一个SharedPreferences接口对象
SharedPreferences read = getSharedPreferences(LOUYU_DATA_REC,
Context.MODE_PRIVATE);
// 步骤2:获取文件中的值
int value = read.getInt("bg_imgId", 0);
return value;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
int nBgImgId = getBgId();
if(nBgImgId != 0)
{
findViewById(R.id.main_layout).setBackgroundResource(nBgImgId);
}