Android でチャット アプリケーションを開発しましたが、アプリケーションに Emoctions 機能を追加したいと考えています。次のリンクをたどりました:
しかし、間に良い解決策は見つかりませんでした。
適切なハイパーリンクまたは解決策を教えてください。
シナリオ: 人は現在の感情から任意の感情を選択でき、受信者側でも受信する必要があります。
Android でチャット アプリケーションを開発しましたが、アプリケーションに Emoctions 機能を追加したいと考えています。次のリンクをたどりました:
しかし、間に良い解決策は見つかりませんでした。
適切なハイパーリンクまたは解決策を教えてください。
シナリオ: 人は現在の感情から任意の感情を選択でき、受信者側でも受信する必要があります。
私はそれを解決しました。これが私のコードです:
次のように移動します。
private HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
private ArrayList<String> arrayListSmileys = new ArrayList<String>();
ImageView imgbtn_show_smileys;
あなたのoncreate関数では、このように進みます
emoticons.put(":-)", R.drawable.smile);
emoticons.put(":P", R.drawable.tongue);
emoticons.put(":D", R.drawable.cool);
emoticons.put(":-(", R.drawable.sad);
emoticons.put(":0", R.drawable.cool);
fillArrayList();
使用したい画像/スマイリーのペアの独自のセットを作成します
配列リストを埋める
private void fillArrayList() {
Iterator<Entry<String, Integer>> iterator = emoticons.entrySet().iterator();
while(iterator.hasNext()){
Entry<String, Integer> entry = iterator.next();
arrayListSmileys.add(entry.getKey());
}
}
最も重要な部分は、画像をリストビューまたは編集テキストに設定するたびに、この関数を次のように使用することです。
edittext.setText(getSmiledText(this,"your text"));
public Spannable getSmiledText(Context context, String text) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
int index;
for (index = 0; index < builder.length(); index++) {
for (Entry<String, Integer> entry : emoticons.entrySet()) {
int length = entry.getKey().length();
if (index + length > builder.length())
continue;
if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index += length - 1;
break;
}
}
}
return builder;
}
ダイアログ ボタンにスマイリーを表示するには
imgbtn_show_smileys.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
final Dialog groupIconsDialog = new Dialog(UserChatActivity.this);
groupIconsDialog.setTitle("Choose Group Icon");
groupIconsDialog.setContentView(R.layout.group_icons_layout);
//calling and setting the image icons to the grid view adapter
final GridView groupIconsGrid = (GridView)groupIconsDialog.findViewById(R.id.grid_groupIcons);
groupIconsGrid.setAdapter(new SmileysAdapter(arrayListSmileys, UserChatActivity.this, emoticons));
groupIconsGrid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
String value = groupIconsGrid.getAdapter().getItem(position).toString();
value = editMessage.getText()+value;
Spannable spannable = getSmiledText(UserChatActivity.this, value);
editMessage.setText(spannable);
groupIconsDialog.dismiss();
}
});
groupIconsDialog.show();
}
});
同じことについて疑問がある場合はお知らせください。
ありがとう
問題を解決するために使用しているSmileysアダプターは次のとおりです。
public class SmileysAdapter extends BaseAdapter {
private ArrayList<String> arrayListSmileys = new ArrayList<String>();
private Context context;
private HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
private ArrayList<String> showListSmileys = new ArrayList<String>();
public SmileysAdapter(ArrayList<String> arraylistSmileys,Context context,HashMap<String, Integer> emoticons) {
// TODO Auto-generated constructor stub
this.arrayListSmileys = arraylistSmileys;
this.context = context;
this.emoticons = emoticons;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayListSmileys.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayListSmileys.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(context).inflate(R.layout.row, null);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);
imageView.setBackgroundResource(emoticons.get(arrayListSmileys.get(position)));
return convertView;
}
}
まあ、基本的に顔文字はこのように処理されます。すべての絵文字は、文字の組み合わせに基づいています。対応する文字の組み合わせで、さまざまなイメージを作成できます。これを使ってシナリオを作ってみましょう。