头像选择主要用到的是两个知识,一个是调用activity,一个是网格视图。总体思路是:新建两个布局文件,xml1是可供选择头像页面的视图,xml2是每个头像的视图。在默认生成的xml文件中新建一个ImageView框出一块用来放头像,新建一个Button来进入头像选择页面。
<ImageView
android:layout_width="100dp"
android:layout_centerHorizontal="true"
android:layout_margin="20dp"
android:layout_height="100dp"
android:id="@+id/kuang"
/>
<Button
android:id="@+id/anniu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_margin="150dp"
/>
在MainActivity中,先重写OnCreat方法,在里面为button建立单击事件监听器,通过Intent把主activity与要调用的activity连接起来,然后StartActivityforResult,这里需要两个参数,一个是intent,一个是返回码。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.anniu);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,touxiang.class);
startActivityForResult(intent,0x11);
}
});
}
然后还要重写OnActivityResult方法,当发出的返回码与收到的返回码相同时,获取要调用Activity的bundle,引用xml1中的ImageView(因为bundle里面的内容是ImageView类型,如果是text类型就换成TextView),新建一个int类型的变量,用来存放另一个Activity返回的图片,键值为“image”(这是另一个Activity定义的,这里省略了Bundle bundle=data.getextras()这个操作,对这个ImageView设置资源文件为该int变量,MainActivity里面的操作就完成了。
public class MainActivity extends AppCompatActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==0x11 && resultCode==0x11){
int ID=data.getExtras().getInt("image");
ImageView imageView=(ImageView)findViewById(R.id.kuang);
imageView.setImageResource(ID);
}
}
转到要打开的Activity,该类继承自Activity,先新建一个int数组储存图片,首先是GridView的操作。在重写OnCreat方法设置布局文件为xml1,导入xml1中的GridView组件,创建List对象,方法为ArrayList,在循环中创建Map对象,方法为HashMap,map有两个参数,分别为关键字和图片文件,用put方法添加到map,用add方法添加到list,之后便是适配器的操作。新建SimpleAdapter,有四个参数,第一个是上下文对象this,第二个是list对象,第三个是layout文件,就是xml2,第四个是map的关键字,第五个是放置每个图片的ImageView,注意适配器是对所有对象进行操作的,所以第四第五都是数组类型
public class touxiang extends Activity {
private int[] picture=new int[]{R.drawable.h1,R.drawable.h2,R.drawable.h5};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wangge);
GridView gridView=(GridView)findViewById(R.id.wangge);
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
for(int i=0;i<picture.length;i++) {
Map<String, Object> map = new HashMap<>();
map.put("image", picture[i]);
list.add(map);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(this,list,R.layout.cell,new String[]{"image"},new int[]{R.id.image1});
gridView.setAdapter(simpleAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent=getIntent();
Bundle bundle=new Bundle();
bundle.putInt("image",picture[position]);
intent.putExtras(bundle);
setResult(0x11,intent);
finish();
}
});
}
}
运行结果
初始页面
点击按钮
选择一个
因为是学习,随手截图就用来当素材了,虽然功能实现了,但是就很丑哈哈