Android PopupWindow 头像选取

  •  结果演示

选取头像演示
头像选取
  • 运行环境 

平台:Android Studio

targetSdkVersion: 27

compileSdkVersion: 27

  • 代码:

java代码:MainActivity.java

XML布局代码: activity_main.xml

                           choose_head_portrait.xml

                           item_gridview.xml

MainActivity.java 代码: 


import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //图片资源
    private int[] images=new int[]{R.drawable.head_portrait_01,R.drawable.head_portrait_02,R.drawable.head_portrait_03,
            R.drawable.head_portrait_04,R.drawable.head_portrait_05,R.drawable.head_portrait_06};

    //设置PopupWindow,GridView将显示在PopupWindow之上
    private PopupWindow mPoppup;

    //设置GridView用于显示头像
    private GridView mGridView;

    //设置选取头像的ImageButton图片按钮
    private ImageButton imageButton;

    //用于传递选取头像的序号
    //private int head_portrait;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //头像选取的ImageButton
        imageButton=(ImageButton)findViewById(R.id.choose_head_portrait);

        //R.layout.choose_head_portrait实例化为View
        //加载popupWindow的布局文件
        View view= LayoutInflater.from(this).inflate(R.layout.choose_head_portrait,null);

        //为GridView设置适配器MyGridAdapter()
        mGridView=(GridView)view.findViewById(R.id.gridView);
        mGridView.setAdapter(new MyGridAdapter());

        //mPoppup=new PopupWindow(view, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.MATCH_PARENT,false);

        //将view设置到PopupWindow中
        mPoppup=new PopupWindow(view, GridLayout.LayoutParams.WRAP_CONTENT, GridLayout.LayoutParams.WRAP_CONTENT,false);
        
        //为PopupWindow设置背景
        mPoppup.setBackgroundDrawable(new BitmapDrawable(getResources(),(Bitmap)null));

        //设置PopupWindow之外的点击事件
        mPoppup.setOutsideTouchable(true);

        //为PopupWindow聚焦
        mPoppup.setFocusable(true);

        //头像选取的点击事件的监听
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //如果PopWindow打开
                if(mPoppup.isShowing()){
                    //则隐藏PopupWindow
                    mPoppup.dismiss();
                }else {
                    // Toast.makeText(LoginActivity.this, "头像选取", Toast.LENGTH_LONG).show();
                    //为PopupWindow设置位置
                    //在imageButton的下方,x的偏移量为-145,y的偏移量为10
                    //偏移量根据实际设置
                    mPoppup.showAsDropDown(imageButton,-145,10);

                    //为GridView中Item即网格布局中的图片设置点击事件监听
                    //用于判断用户选取了哪个头像
                    mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                            position=position+1;
                            Toast.makeText(MainActivity.this, "选择头像"+position, Toast.LENGTH_LONG).show();
                            switch (position){
                                case 1:imageButton.setImageResource(R.drawable.head_portrait_01);
                                    //head_portrait=position;
                                    break;
                                case 2:imageButton.setImageResource(R.drawable.head_portrait_02);
                                    //head_portrait=position;
                                    break;
                                case 3:imageButton.setImageResource(R.drawable.head_portrait_03);
                                    //head_portrait=position;
                                    break;
                                case 4:imageButton.setImageResource(R.drawable.head_portrait_04);
                                   //head_portrait=position;
                                    break;
                                case 5:imageButton.setImageResource(R.drawable.head_portrait_05);
                                    //head_portrait=position;
                                    break;
                                case 6:imageButton.setImageResource(R.drawable.head_portrait_06);
                                    //head_portrait=position;
                                    break;
                                default: imageButton.setImageResource(R.drawable.head_portrait_01);
                                    //head_portrait=1;
                                    break;
                            }
                            //选取头像后,PopupWindow隐藏
                            mPoppup.dismiss();
                        }
                    });
                }
            }
        });

        //为view设置点击事件设置监听
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mPoppup.isShowing()){
                    mPoppup.dismiss();
                }
            }
        });
    }

    //用于GridView的适配器
    class MyGridAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return images.length;
        }

        @Override
        public Object getItem(int position) {
            return images[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_gridview, null);
            ImageView iv=(ImageView) convertView.findViewById(R.id.item_imageview);
            iv.setImageResource(images[position]);
            return convertView;
        }

    }

}

activity_main.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <ImageButton
        android:id="@+id/choose_head_portrait"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_centerHorizontal="true"
        android:background="#0000"
        android:scaleType="fitCenter"
        android:src="@drawable/head_portrait_01" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="头像选取" />

</LinearLayout>

choose_head_portrait.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="240dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:background="#8000"
    android:gravity="center"
    android:id="@+id/Ly_head">

    <!--android:numColumns="auto_fit"-->
    <GridView
        android:id="@+id/gridView"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:columnWidth="60dp"
        android:numColumns="3"
        android:stretchMode="spacingWidthUniform"
        android:layout_gravity="center"
        android:verticalSpacing="5dp">

    </GridView>

</LinearLayout>

 

item_gridview.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:id="@+id/item_imageview"
        android:src="@mipmap/ic_launcher"/>

</LinearLayout>

 

 未完

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值