一,抓取图片
可以去一些有表情的网站抓取表情,我是直接用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();
}
}
![](http://hi.csdn.net/attachment/201111/17/0_1321516736SQhk.gif)