android实现表情 抓取新浪表情

 一,抓取图片

             可以去一些有表情的网站抓取表情,我是直接用firefox 复制下新浪的图片,给个url路径

HTML 发不出来 写在另外地方 

没用数据库,直接解析到了txt文件中

温暖帽子=wennuanmaozi_thumb.gif
手套=shoutao_thumb.gif
围脖=weijin_thumb.gif
圣诞树=christree_thumb.gif
圣诞帽=chrishat_thumb.gif
药=y_thumb.gif
礼花=bingo_thumb.gif
淘气=bobotiaopi_thumb.gif
有爱=totoyouai_thumb.gif
好可怜=kelian_thumb.gif
呲牙=ciya_thumb.gif
织=zz2_thumb.gif
神马=horse2_thumb.gif
浮云=fuyun_thumb.gif
给力=geili_thumb.gif
围观=wg_thumb.gif
威武=vw_thumb.gif
熊猫=panda_thumb.gif
兔子=rabbit_thumb.gif
奥特曼=otm_thumb.gif
囧=j_thumb.gif
互粉=hufen_thumb.gif
礼物=liwu_thumb.gif
呵呵=smilea_thumb.gif
嘻嘻=tootha_thumb.gif
哈哈=laugh.gif
可爱=tza_thumb.gif
可怜=kl_thumb.gif
挖鼻屎=kbsa_thumb.gif
吃惊=cj_thumb.gif
害羞=shamea_thumb.gif
挤眼=zy_thumb.gif
闭嘴=bz_thumb.gif
鄙视=bs2_thumb.gif
爱你=lovea_thumb.gif
泪=sada_thumb.gif
偷笑=heia_thumb.gif
亲亲=qq_thumb.gif
生病=sb_thumb.gif
太开心=mb_thumb.gif
懒得理你=ldln_thumb.gif
右哼哼=yhh_thumb.gif
左哼哼=zhh_thumb.gif
嘘=x_thumb.gif
衰=cry.gif
委屈=wq_thumb.gif
吐=t_thumb.gif
打哈气=k_thumb.gif
抱抱=bba_thumb.gif
怒=angrya_thumb.gif
疑问=yw_thumb.gif
馋嘴=cza_thumb.gif
拜拜=bb_thumb.gif
思考=sk_thumb.gif
汗=sweata_thumb.gif
困=sleepya_thumb.gif
睡觉=sleepa_thumb.gif
钱=money_thumb.gif
失望=sw_thumb.gif
酷=cool_thumb.gif
花心=hsa_thumb.gif
哼=hatea_thumb.gif
鼓掌=gza_thumb.gif
晕=dizzya_thumb.gif
悲伤=bs_thumb.gif
抓狂=crazya_thumb.gif
黑线=h_thumb.gif
阴险=yx_thumb.gif
怒骂=nm_thumb.gif
心=hearta_thumb.gif
伤心=unheart.gif
猪头=pig.gif
ok=ok_thumb.gif
耶=ye_thumb.gif
good=good_thumb.gif
不要=no_thumb.gif
赞=z2_thumb.gif
来=come_thumb.gif
弱=sad_thumb.gif
蜡烛=lazu_thumb.gif
钟=clock_thumb.gif
蛋糕=cake.gif
话筒=m_thumb.gif
 
将图片保存到drawable 路径下,txt文件保存到assest路径下

二 获取文件列表

以下为FileUtil.java内容

/**
	 * 获取图片对应List
	 * @param (InputStream) in 文件名 流
	 * @return (List<Map<String,String> images 
	 * @throws IOException 
	 */
	public List<Map<String,String>> getImageList(InputStream in) throws Exception{
		List<Map<String,String>> images=new ArrayList<Map<String,String>>();
		BufferedReader buffin=new BufferedReader(new InputStreamReader(in,"utf-8"));
		String line;
		String[] str=null;//拆分字符
		Map<String,String> map;
		Field f;
		int i=0;
		while( (line=buffin.readLine())!=null){
			if(line.trim().length()>4){
			map=new HashMap<String,String>();
			str=line.trim().split("=");
			map.put("name", "["+str[0]+"]");
			str[1]=str[1].substring(0,str[1].indexOf("."));
			f=(Field)R.drawable.class.getDeclaredField(str[1]);
			int j=f.getInt(R.drawable.class);
			map.put("path", j+"");
			images.add(map);
			}
		}
		in.close();
		return images;
	}
	
	/**
	 * 文字转图片
	 * @param (String) content传入文字
	 * @param (Context) c
	 * @return
	 */
	public SpannableString strToImage(String content,Context c){
		SpannableString ss = new SpannableString(content);
		System.out.println(content.length());
		int start=0;
		int end=0;
		Pattern pattern=Pattern.compile("\\[[^\\]]+\\]");
		String str="";
		Matcher m=pattern.matcher(content);
		while(m.find()){
			start=start+str.length()+content.indexOf("[");
			end= start+m.group().length()-1;
			str=m.group();
			System.out.println("start=="+start+",end==="+end);
			replaceImage(c,m.group(),ss,start,end);
			content=content.substring(content.indexOf(m.group())+m.group().length());
			m=pattern.matcher(content);
		}
		return ss;
	}
	public void replaceImage(Context c,String content,SpannableString ss,int starts,int end){
		 SharedPreferences shared=c.getSharedPreferences("emotion",0); //通过xml文件获取对应图片ID
		 int resource=shared.getInt(content,0);
			try {
				Drawable drawable =c.getResources().getDrawable(resource);  
				if (drawable != null) {
					drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 
			        ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);  
			        ss.setSpan(span, starts,end + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
				}
			} catch (Exception ex){
				
			}
	}


三 重新BaseAdapter 对象

   ImageAdapter.java

package com.lin.gridview;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
	private Context mContext;
	private List<Map<String,String>> images;

	public ImageAdapter(Context c,List<Map<String,String>> images) {
		mContext = c;
		this.images=images;
	}

	public int getCount() {
		return images.size();
	}

	public Object getItem(int position) {
		return null;
	}

	public long getItemId(int position) {
		return 0;
	}

	// create a new ImageView for each item referenced by the Adapter
	public View getView(int position, View convertView, ViewGroup parent) {
		ImageView imageView;
		if (convertView == null) { // if it's not recycled, initialize some
									// attributes
			imageView = new ImageView(mContext);
			imageView.setLayoutParams(new GridView.LayoutParams(35, 35));
			imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
			imageView.setPadding(8, 8, 8, 8);
		} else {
			imageView = (ImageView) convertView;
		}
		Map<String,String> image=images.get(position);
		imageView.setImageResource(Integer.parseInt(image.get("path")));
		return imageView;
	}

}


 

下面为main.xml配置

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:orientation="vertical"
        android:layout_height="100dip" >

        <EditText
            android:id="@+id/inputText"
            android:gravity="left|top"
            android:text="dskfj"
            android:layout_width="fill_parent"
            android:layout_height="60dip" >
        </EditText>
        <ImageView android:layout_width="fill_parent"
            android:layout_height="40dip" android:id="@+id/imageView"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <GridView
          
            android:id="@+id/gridview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:columnWidth="40dp"
            android:gravity="center"
            android:horizontalSpacing="10dp"
            android:numColumns="auto_fit"
            android:stretchMode="columnWidth"
            android:verticalSpacing="10dp" />
    </LinearLayout>

</LinearLayout>


四,可以写主activity对象了

在create中直接调用 bindEmotionView

public void bindEmotionView(){
		final AssetManager assetManager = getAssets(); 
		try {
			InputStream in=assetManager.open("emotion.txt");
			FileUtil fileUtil=new FileUtil();
			images=fileUtil.getImageList(in);
			in.close();
			   SharedPreferences shared=getSharedPreferences("emotion",0);
			   shared.edit().clear().commit();
			   Editor editor=shared.edit();
			   for(int i=0;i<images.size();i++){
				   Map<String,String> map=images.get(i);
				  editor.putInt(map.get("name"), Integer.parseInt(map.get("path")));
			   }
			   editor.commit();
			ImageAdapter adapter=new ImageAdapter(EditQuanboActivity.this,
					images);
			emotionView.setAdapter(adapter);



			emotionView.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> parent, View v,
						int position, long id) {
					Map<String,String> map=images.get(position);
					//SpannableString ss=new FileUtil().textToImage(map.get("name"),EditQuanboActivity.this);
					SpannableString ss=new FileUtil().strToImage(map.get("name"),EditQuanboActivity.this);
					int cursor=quanboEditText.getSelectionStart();
					quanboEditText.getText().insert(cursor, ss);
				}
			});
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值