123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package me.yoqi.android.safekeyboard.keyboard.view;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Rect;
- import android.graphics.Typeface;
- import android.graphics.drawable.Drawable;
- import android.inputmethodservice.Keyboard;
- import android.inputmethodservice.KeyboardView;
- import android.util.AttributeSet;
- import java.lang.reflect.Field;
- import java.util.List;
- import me.yoqi.android.safekeyboard.R;
- import me.yoqi.android.safekeyboard.keyboard.KhKeyboardView;
- /** 自定义全键盘布局 继承系统的 KeyboardView
- * Created by liuyu1 on 2017/8/2.
- */
- public class CustomKeyboardView extends KeyboardView {
- private Context context;
- public CustomKeyboardView(Context context, AttributeSet attrs) {
- super(context, attrs);
- this.context = context;
- }
- /** 绘制一个键盘
- * @param canvas
- */
- @Override
- public void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- try {
- List<Keyboard.Key> keys = getKeyboard().getKeys();
- for (Keyboard.Key key : keys) {
- if (key.codes[0] == -5) {
- Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_del_layerlist);
- dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
- dr.draw(canvas);
- } else if (key.codes[0] == -35) {
- Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_del_layerlist2);
- dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
- dr.draw(canvas);
- } else if (key.codes[0] == -1) {
- Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_shift_layerlist);
- Drawable dr_da = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_shift_layerlist_da);
- dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
- dr_da.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
- if (KhKeyboardView.isUpper) {
- dr_da.draw(canvas);
- } else {
- dr.draw(canvas);
- }
- } else if (key.codes[0] == -2 || key.codes[0] == 90001) {
- Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_selector_blue_bg);
- dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
- dr.draw(canvas);
- drawText(canvas, key);
- } else {
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void drawText(Canvas canvas, Keyboard.Key key) {
- try {
- Rect bounds = new Rect(); //矩形
- Paint paint = new Paint();
- paint.setTextAlign(Paint.Align.CENTER);
- paint.setAntiAlias(true);
- paint.setColor(Color.WHITE);
- if (key.label != null) {
- String label = key.label.toString();
- Field field;
- if (label.length() > 1 && key.codes.length < 2) {
- int labelTextSize = 0;
- try {
- field = KeyboardView.class.getDeclaredField("mLabelTextSize");
- field.setAccessible(true);
- labelTextSize = (int) field.get(this);
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- paint.setTextSize(labelTextSize);
- paint.setTypeface(Typeface.DEFAULT_BOLD);
- } else {
- int keyTextSize = 0;
- try {
- field = KeyboardView.class.getDeclaredField("mLabelTextSize");
- field.setAccessible(true);
- keyTextSize = (int) field.get(this);
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- paint.setTextSize(keyTextSize);
- paint.setTypeface(Typeface.DEFAULT);
- }
- paint.getTextBounds(key.label.toString(), 0, key.label.toString()
- .length(), bounds);
- canvas.drawText(key.label.toString(), key.x + (key.width / 2),
- (key.y + key.height / 2) + bounds.height() / 2, paint);
- } else if (key.icon != null) {
- key.icon.setBounds(key.x + (key.width - key.icon.getIntrinsicWidth()) / 2, key.y + (key.height - key.icon.getIntrinsicHeight()) / 2,
- key.x + (key.width - key.icon.getIntrinsicWidth()) / 2 + key.icon.getIntrinsicWidth(), key.y + (key.height - key.icon.getIntrinsicHeight()) / 2 + key.icon.getIntrinsicHeight());
- key.icon.draw(canvas);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
|