自定义View类控制焦点以及android现实缩小图片的像素和如何通过BitmapFactory读得图片资源,做了笔记。以下代码提供给大伙参考。
package com.view;
import java.util.HashMap;
import com.pojo.Constants;
import com.test.R;
import android.content.Context;
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.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
public class ADWView extends View {
Context myContext = this.getContext();
//读得String.xml里面的资源
private String a = myContext.getString(R.string.app_a);
private String b = myContext.getString(R.string.app_b);
private String c = myContext.getString(R.string.app_c);
private String d = myContext.getString(R.string.app_d);
private String e = myContext.getString(R.string.app_e);
private int focusID = 0;
private Bitmap focusbmp, progressBar_A,progressBar_B,progressBar_C,progressBar_D,progressBar_E,progressBar;
private Bitmap bitmap_A,bitmap_B,bitmap_C,bitmap_D,bitmap_E;
HashMap<Integer, Integer> progressBarMap = null;
public ADWView(Context context) {
super(context);
this.setFocusable(true);
this.requestFocus();
initData();
//焦点图片通过BitmapFactory来得到图片资源R.drawable.shortcut_bg_sel
focusbmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.shortcut_bg_sel);
}
@Override
protected void onDraw(Canvas canvas) {
//焦点图片初始位置
if (focusbmp != null) {
canvas.drawBitmap(focusbmp, this.getPaddingLeft()-20,
this.getPaddingTop() + focusID * 100 + 230, null);
}
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(25);
paint.setAntiAlias(true);
//获得图片的集合progressBarMap.get(Constants.progressBarValueA)
progressBar_A = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueA));
progressBar_B = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueB));
progressBar_C = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueC));
progressBar_D = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueD));
progressBar_E = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueE));
//获得图片的宽和高
int w = 22000/progressBar_A.getWidth();
int h = 22000/progressBar_A.getHeight();
//刷新图片的像素大小
bitmap_A = progressBar.createScaledBitmap(progressBar_A, w, h, true);
bitmap_B = progressBar.createScaledBitmap(progressBar_B, w, h, true);
bitmap_C = progressBar.createScaledBitmap(progressBar_C, w, h, true);
bitmap_D = progressBar.createScaledBitmap(progressBar_D, w, h, true);
bitmap_E = progressBar.createScaledBitmap(progressBar_E, w, h, true);
//文字放置在屏幕的位置
canvas.drawText(a + " " + String.valueOf(Constants.A),
getPaddingLeft() + 80, getPaddingTop() + 300, paint);
//图片的放置在屏幕的位置
canvas.drawBitmap(bitmap_A,getPaddingLeft()+ 244,
getPaddingTop() + 247, null);
canvas.drawText(b + " " + String.valueOf(Constants.B),
getPaddingLeft() + 80, getPaddingTop() + 400, paint);
canvas.drawBitmap(bitmap_B, getPaddingLeft()+ 244,
getPaddingTop() + 347, null);
canvas.drawText(c + " " + String.valueOf(Constants.C),
getPaddingLeft() + 80,getPaddingTop() + 500, paint);
canvas.drawBitmap(bitmap_C, getPaddingLeft()+ 244,
getPaddingTop() + 447, null);
canvas.drawText(d + " " + String.valueOf(Constants.D),
getPaddingLeft() + 80,getPaddingTop() + 600, paint);
canvas.drawBitmap(bitmap_D, getPaddingLeft()+ 244,
getPaddingTop() + 547, null);
canvas.drawText(e + " " + String.valueOf(Constants.E),
getPaddingLeft() + 80,getPaddingTop() + 700, paint);
canvas.drawBitmap(bitmap_E, getPaddingLeft()+ 244,
getPaddingTop() + 647, null);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
if (focusID > 0) {
focusID--;
} else {
focusID = 4;
}
this.invalidate();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (focusID < 4) {
focusID++;
} else {
focusID = 0;
}
this.invalidate();
break;
//左键的响应
case KeyEvent.KEYCODE_DPAD_LEFT:
if (focusID == 0) {
if (Constants.A >-10) {
Constants.A--;
Constants.progressBarValueA--;
} else {
Constants.A = -10;
Constants.progressBarValueA=6;
}
this.invalidate();
} else if (focusID == 1) {
if (Constants.B > -10) {
Constants.B--;
Constants.progressBarValueB--;
} else {
Constants.B = -10;
Constants.progressBarValueB=6;
}
this.invalidate();
}else if (focusID == 2) {
if (Constants.C > -10) {
Constants.C--;
Constants.progressBarValueC--;
} else {
Constants.C = -10;
Constants.progressBarValueC=6;
}
this.invalidate();
}else if (focusID == 3) {
if (Constants.D > -10) {
Constants.D--;
Constants.progressBarValueD--;
} else {
Constants.D = -10;
Constants.progressBarValueD=6;
}
this.invalidate();
}else if (focusID == 4) {
if (Constants.E > -10) {
Constants.E--;
Constants.progressBarValueE--;
} else {
Constants.E = -10;
Constants.progressBarValueE=6;
}
this.invalidate();
}
break;
//右键的响应
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (focusID == 0) {
if (Constants.A < (10-1)) {
Constants.A++;
Constants.progressBarValueA++;
} else {
Constants.A = 10;
Constants.progressBarValueA = 26;
}
this.invalidate();
} else if (focusID == 1) {
if (Constants.B < (10 - 1)) {
Constants.B++;
Constants.progressBarValueB++;
} else {
Constants.B = 10;
Constants.progressBarValueB = 26;
}
this.invalidate();
}else if (focusID == 2) {
if (Constants.C < (10 - 1)) {
Constants.C++;
Constants.progressBarValueC++;
} else {
Constants.C = 10;
Constants.progressBarValueC = 26;
}
this.invalidate();
}else if (focusID == 3) {
if (Constants.D < (10 - 1)) {
Constants.D++;
Constants.progressBarValueD++;
} else {
Constants.D = 10;
Constants.progressBarValueD = 26;
}
this.invalidate();
}else if (focusID == 4) {
if (Constants.E < (10 - 1)) {
Constants.E++;
Constants.progressBarValueE++;
} else {
Constants.E = 10;
Constants.progressBarValueE = 26;
}
this.invalidate();
}
break;
//焦点的控制
case KeyEvent.KEYCODE_ENTER:
switch (focusID) {
case 0:
focusID = 1;
break;
case 1:
focusID = 2;
break;
case 2:
focusID = 3;
break;
case 3:
focusID = 4;
break;
case 4:
focusID = 0;
break;
default:
break;
}
this.invalidate();
break;
//退出按键的响应
case KeyEvent.KEYCODE_BACK:
((ViewGroup) (this.getParent())).removeView(this);
break;
default:
break;
}
return true;
}
//做一个图片资源的集合
public void initData() {
progressBarMap = new HashMap<Integer, Integer>();
progressBarMap.put(1, R.drawable.sound_1);
progressBarMap.put(2, R.drawable.sound_2);
progressBarMap.put(3, R.drawable.sound_3);
progressBarMap.put(4, R.drawable.sound_4);
progressBarMap.put(5, R.drawable.sound_5);
progressBarMap.put(6, R.drawable.sound_6);
progressBarMap.put(7, R.drawable.sound_7);
progressBarMap.put(8, R.drawable.sound_8);
progressBarMap.put(9, R.drawable.sound_9);
progressBarMap.put(10, R.drawable.sound_10);
progressBarMap.put(11, R.drawable.sound_11);
progressBarMap.put(12, R.drawable.sound_12);
progressBarMap.put(13, R.drawable.sound_13);
progressBarMap.put(14, R.drawable.sound_14);
progressBarMap.put(15, R.drawable.sound_15);
progressBarMap.put(16, R.drawable.sound_16);
progressBarMap.put(17, R.drawable.sound_17);
progressBarMap.put(18, R.drawable.sound_18);
progressBarMap.put(19, R.drawable.sound_19);
progressBarMap.put(20, R.drawable.sound_20);
progressBarMap.put(21, R.drawable.sound_21);
progressBarMap.put(22, R.drawable.sound_22);
progressBarMap.put(23, R.drawable.sound_23);
progressBarMap.put(24, R.drawable.sound_24);
progressBarMap.put(25, R.drawable.sound_25);
progressBarMap.put(26, R.drawable.sound_26);
progressBarMap.put(27, R.drawable.sound_27);
progressBarMap.put(28, R.drawable.sound_28);
progressBarMap.put(29, R.drawable.sound_29);
progressBarMap.put(30, R.drawable.sound_30);
progressBarMap.put(31, R.drawable.sound_31);
progressBarMap.put(32, R.drawable.sound_32);
}
}