歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 實現縮小圖片像素

Android 實現縮小圖片像素

日期:2017/3/1 10:25:54   编辑:Linux編程

自定義View類控制焦點以及Android現實縮小圖片的像素和如何通過BitmapFactory讀得圖片資源,做了筆記。以下代碼提供給大伙參考。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

  1. package com.view;
  2. import java.util.HashMap;
  3. import com.pojo.Constants;
  4. import com.test.R;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.graphics.Canvas;
  9. import android.graphics.Color;
  10. import android.graphics.Matrix;
  11. import android.graphics.Paint;
  12. import android.util.Log;
  13. import android.view.KeyEvent;
  14. import android.view.View;
  15. import android.view.ViewGroup;
  16. public class ADWView extends View {
  17. Context myContext = this.getContext();
  18. //讀得String.xml裡面的資源
  19. private String a = myContext.getString(R.string.app_a);
  20. private String b = myContext.getString(R.string.app_b);
  21. private String c = myContext.getString(R.string.app_c);
  22. private String d = myContext.getString(R.string.app_d);
  23. private String e = myContext.getString(R.string.app_e);
  24. private int focusID = 0;
  25. private Bitmap focusbmp, progressBar_A,progressBar_B,progressBar_C,progressBar_D,progressBar_E,progressBar;
  26. private Bitmap bitmap_A,bitmap_B,bitmap_C,bitmap_D,bitmap_E;
  27. HashMap<Integer, Integer> progressBarMap = null;
  28. public ADWView(Context context) {
  29. super(context);
  30. this.setFocusable(true);
  31. this.requestFocus();
  32. initData();
  33. //焦點圖片通過BitmapFactory來得到圖片資源R.drawable.shortcut_bg_sel
  34. focusbmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.shortcut_bg_sel);
  35. }
  36. @Override
  37. protected void onDraw(Canvas canvas) {
  38. //焦點圖片初始位置
  39. if (focusbmp != null) {
  40. canvas.drawBitmap(focusbmp, this.getPaddingLeft()-20,
  41. this.getPaddingTop() + focusID * 100 + 230, null);
  42. }
  43. super.onDraw(canvas);
  44. Paint paint = new Paint();
  45. paint.setColor(Color.WHITE);
  46. paint.setTextSize(25);
  47. paint.setAntiAlias(true);
  48. //獲得圖片的集合progressBarMap.get(Constants.progressBarValueA)
  49. progressBar_A = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueA));
  50. progressBar_B = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueB));
  51. progressBar_C = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueC));
  52. progressBar_D = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueD));
  53. progressBar_E = BitmapFactory.decodeResource(this.getResources(),progressBarMap.get(Constants.progressBarValueE));
  54. //獲得圖片的寬和高
  55. int w = 22000/progressBar_A.getWidth();
  56. int h = 22000/progressBar_A.getHeight();
  57. //刷新圖片的像素大小
  58. bitmap_A = progressBar.createScaledBitmap(progressBar_A, w, h, true);
  59. bitmap_B = progressBar.createScaledBitmap(progressBar_B, w, h, true);
  60. bitmap_C = progressBar.createScaledBitmap(progressBar_C, w, h, true);
  61. bitmap_D = progressBar.createScaledBitmap(progressBar_D, w, h, true);
  62. bitmap_E = progressBar.createScaledBitmap(progressBar_E, w, h, true);
  63. //文字放置在屏幕的位置
  64. canvas.drawText(a + " " + String.valueOf(Constants.A),
  65. getPaddingLeft() + 80, getPaddingTop() + 300, paint);
  66. //圖片的放置在屏幕的位置
  67. canvas.drawBitmap(bitmap_A,getPaddingLeft()+ 244,
  68. getPaddingTop() + 247, null);
  69. canvas.drawText(b + " " + String.valueOf(Constants.B),
  70. getPaddingLeft() + 80, getPaddingTop() + 400, paint);
  71. canvas.drawBitmap(bitmap_B, getPaddingLeft()+ 244,
  72. getPaddingTop() + 347, null);
  73. canvas.drawText(c + " " + String.valueOf(Constants.C),
  74. getPaddingLeft() + 80,getPaddingTop() + 500, paint);
  75. canvas.drawBitmap(bitmap_C, getPaddingLeft()+ 244,
  76. getPaddingTop() + 447, null);
  77. canvas.drawText(d + " " + String.valueOf(Constants.D),
  78. getPaddingLeft() + 80,getPaddingTop() + 600, paint);
  79. canvas.drawBitmap(bitmap_D, getPaddingLeft()+ 244,
  80. getPaddingTop() + 547, null);
  81. canvas.drawText(e + " " + String.valueOf(Constants.E),
  82. getPaddingLeft() + 80,getPaddingTop() + 700, paint);
  83. canvas.drawBitmap(bitmap_E, getPaddingLeft()+ 244,
  84. getPaddingTop() + 647, null);
  85. }
  86. public boolean onKeyDown(int keyCode, KeyEvent event) {
  87. super.onKeyDown(keyCode, event);
  88. switch (keyCode) {
  89. case KeyEvent.KEYCODE_DPAD_UP:
  90. if (focusID > 0) {
  91. focusID--;
  92. } else {
  93. focusID = 4;
  94. }
  95. this.invalidate();
  96. break;
  97. case KeyEvent.KEYCODE_DPAD_DOWN:
  98. if (focusID < 4) {
  99. focusID++;
  100. } else {
  101. focusID = 0;
  102. }
  103. this.invalidate();
  104. break;
  105. //左鍵的響應
  106. case KeyEvent.KEYCODE_DPAD_LEFT:
  107. if (focusID == 0) {
  108. if (Constants.A >-10) {
  109. Constants.A--;
  110. Constants.progressBarValueA--;
  111. } else {
  112. Constants.A = -10;
  113. Constants.progressBarValueA=6;
  114. }
  115. this.invalidate();
  116. } else if (focusID == 1) {
  117. if (Constants.B > -10) {
  118. Constants.B--;
  119. Constants.progressBarValueB--;
  120. } else {
  121. Constants.B = -10;
  122. Constants.progressBarValueB=6;
  123. }
  124. this.invalidate();
  125. }else if (focusID == 2) {
  126. if (Constants.C > -10) {
  127. Constants.C--;
  128. Constants.progressBarValueC--;
  129. } else {
  130. Constants.C = -10;
  131. Constants.progressBarValueC=6;
  132. }
  133. this.invalidate();
  134. }else if (focusID == 3) {
  135. if (Constants.D > -10) {
  136. Constants.D--;
  137. Constants.progressBarValueD--;
  138. } else {
  139. Constants.D = -10;
  140. Constants.progressBarValueD=6;
  141. }
  142. this.invalidate();
  143. }else if (focusID == 4) {
  144. if (Constants.E > -10) {
  145. Constants.E--;
  146. Constants.progressBarValueE--;
  147. } else {
  148. Constants.E = -10;
  149. Constants.progressBarValueE=6;
  150. }
  151. this.invalidate();
  152. }
  153. break;
  154. //右鍵的響應
  155. case KeyEvent.KEYCODE_DPAD_RIGHT:
  156. if (focusID == 0) {
  157. if (Constants.A < (10-1)) {
  158. Constants.A++;
  159. Constants.progressBarValueA++;
  160. } else {
  161. Constants.A = 10;
  162. Constants.progressBarValueA = 26;
  163. }
  164. this.invalidate();
  165. } else if (focusID == 1) {
  166. if (Constants.B < (10 - 1)) {
  167. Constants.B++;
  168. Constants.progressBarValueB++;
  169. } else {
  170. Constants.B = 10;
  171. Constants.progressBarValueB = 26;
  172. }
  173. this.invalidate();
  174. }else if (focusID == 2) {
  175. if (Constants.C < (10 - 1)) {
  176. Constants.C++;
  177. Constants.progressBarValueC++;
  178. } else {
  179. Constants.C = 10;
  180. Constants.progressBarValueC = 26;
  181. }
  182. this.invalidate();
  183. }else if (focusID == 3) {
  184. if (Constants.D < (10 - 1)) {
  185. Constants.D++;
  186. Constants.progressBarValueD++;
  187. } else {
  188. Constants.D = 10;
  189. Constants.progressBarValueD = 26;
  190. }
  191. this.invalidate();
  192. }else if (focusID == 4) {
  193. if (Constants.E < (10 - 1)) {
  194. Constants.E++;
  195. Constants.progressBarValueE++;
  196. } else {
  197. Constants.E = 10;
  198. Constants.progressBarValueE = 26;
  199. }
  200. this.invalidate();
  201. }
  202. break;
  203. //焦點的控制
  204. case KeyEvent.KEYCODE_ENTER:
  205. switch (focusID) {
  206. case 0:
  207. focusID = 1;
  208. break;
  209. case 1:
  210. focusID = 2;
  211. break;
  212. case 2:
  213. focusID = 3;
  214. break;
  215. case 3:
  216. focusID = 4;
  217. break;
  218. case 4:
  219. focusID = 0;
  220. break;
  221. default:
  222. break;
  223. }
  224. this.invalidate();
  225. break;
  226. //退出按鍵的響應
  227. case KeyEvent.KEYCODE_BACK:
  228. ((ViewGroup) (this.getParent())).removeView(this);
  229. break;
  230. default:
  231. break;
  232. }
  233. return true;
  234. }
  235. //做一個圖片資源的集合
  236. public void initData() {
  237. progressBarMap = new HashMap<Integer, Integer>();
  238. progressBarMap.put(1, R.drawable.sound_1);
  239. progressBarMap.put(2, R.drawable.sound_2);
  240. progressBarMap.put(3, R.drawable.sound_3);
  241. progressBarMap.put(4, R.drawable.sound_4);
  242. progressBarMap.put(5, R.drawable.sound_5);
  243. progressBarMap.put(6, R.drawable.sound_6);
  244. progressBarMap.put(7, R.drawable.sound_7);
  245. progressBarMap.put(8, R.drawable.sound_8);
  246. progressBarMap.put(9, R.drawable.sound_9);
  247. progressBarMap.put(10, R.drawable.sound_10);
  248. progressBarMap.put(11, R.drawable.sound_11);
  249. progressBarMap.put(12, R.drawable.sound_12);
  250. progressBarMap.put(13, R.drawable.sound_13);
  251. progressBarMap.put(14, R.drawable.sound_14);
  252. progressBarMap.put(15, R.drawable.sound_15);
  253. progressBarMap.put(16, R.drawable.sound_16);
  254. progressBarMap.put(17, R.drawable.sound_17);
  255. progressBarMap.put(18, R.drawable.sound_18);
  256. progressBarMap.put(19, R.drawable.sound_19);
  257. progressBarMap.put(20, R.drawable.sound_20);
  258. progressBarMap.put(21, R.drawable.sound_21);
  259. progressBarMap.put(22, R.drawable.sound_22);
  260. progressBarMap.put(23, R.drawable.sound_23);
  261. progressBarMap.put(24, R.drawable.sound_24);
  262. progressBarMap.put(25, R.drawable.sound_25);
  263. progressBarMap.put(26, R.drawable.sound_26);
  264. progressBarMap.put(27, R.drawable.sound_27);
  265. progressBarMap.put(28, R.drawable.sound_28);
  266. progressBarMap.put(29, R.drawable.sound_29);
  267. progressBarMap.put(30, R.drawable.sound_30);
  268. progressBarMap.put(31, R.drawable.sound_31);
  269. progressBarMap.put(32, R.drawable.sound_32);
  270. }
  271. }
Copyright © Linux教程網 All Rights Reserved