Android PopupWindow,GridView,BaseAdapter以及图片合成综合案例

来源:互联网 发布:中山大学软件学院课程 编辑:程序博客网 时间:2024/06/05 05:32

先看看最终的实现效果吧:

当点击 显示PopupWindow 按钮时,就会弹出该PopupWindow,具体代码如下:

package com.hpsvse.pop;import android.os.Bundle;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.graphics.drawable.BitmapDrawable;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity {PopupWindow popupWindow;RelativeLayout parent;String[] dess = new String[] { "唐诗三百首", "宋词三百首", "元曲三百首", "古诗词分类赏析","小学古诗全文赏析", "三字经" };int[] states = new int[] { R.drawable.ic_install, R.drawable.ic_noinstall };int[] imgs = new int[] { R.drawable.ic0, R.drawable.ic1, R.drawable.ic2,R.drawable.ic3, R.drawable.ic4, R.drawable.ic5 };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);View contentView = getLayoutInflater().inflate(R.layout.paopao, null);GridView gridView = (GridView) contentView.findViewById(R.id.grid);gridView.setAdapter(new GradAdapter());gridView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {if (popupWindow.isShowing()) {Toast.makeText(MainActivity.this, "position = " + position,Toast.LENGTH_SHORT).show();popupWindow.dismiss();}}});popupWindow = new PopupWindow(contentView,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);popupWindow.setFocusable(true);// 使点击空白处是自动关闭PopupWindowpopupWindow.setBackgroundDrawable(new BitmapDrawable());// 设置窗口进出的动画效果popupWindow.setAnimationStyle(<strong><span style="BACKGROUND-COLOR: #33cc00">R.style.dialog_anim</span></strong>);   // 动画xml文件我的在上一篇博文中,你也可以自定义parent = (RelativeLayout) findViewById(R.id.main);}public void click(View view) {popupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);}class GradAdapter extends BaseAdapter {Paint paint;Canvas canvas;public GradAdapter() {paint = new Paint();// 画笔paint.setColor(Color.BLACK);// 图片的合成模式paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_OVER));canvas = new Canvas();// 画布}@Overridepublic int getCount() {return imgs.length;}@Overridepublic Object getItem(int position) {return imgs[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Holder holder;if (convertView == null) {holder = new Holder();convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);holder.img = (ImageView) convertView.findViewById(R.id.img);holder.desc = (TextView) convertView.findViewById(R.id.des);convertView.setTag(holder);} else {holder = (Holder) convertView.getTag();}holder.img.setImageBitmap(getBitmap(position));holder.desc.setText(dess[position]);return convertView;}class Holder {public ImageView img;public TextView desc;}/** * 合成图片 *  * @param position * @return */private Bitmap getBitmap(int position) {// 将图片资源转换成为BitmapBitmap bitmap = BitmapFactory.decodeResource(getResources(),imgs[position]);// 创建一张可以可以画的bitmapBitmap alertBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());canvas.setBitmap(alertBitmap);canvas.drawBitmap(bitmap, new Matrix(), paint);// 将bitmap画上去Bitmap stateBitmap = null;if (position == 0) {stateBitmap = BitmapFactory.decodeResource(getResources(),states[0]);} else {stateBitmap = BitmapFactory.decodeResource(getResources(),states[1]);}Matrix matrix = new Matrix();matrix.setTranslate(68, 68);// 将图片平移canvas.drawBitmap(stateBitmap, matrix, paint);return alertBitmap;}}}


 

 

0 0