Android 实现缩小图片像素

自定义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);
    }

}
时间: 2024-10-31 20:52:06

Android 实现缩小图片像素的相关文章

Android 修改Bitmap 图片像素的信息 R G B 颜色值 详解

要想修改Bitmap图片的 R G B信息 首先 得先拿到这张图片每个点的Color值 然后根据这个Color值 就可以算出对应的R G B 值 我们都知道在计算机语言中在内存中加载一张图片实际上是把图片的每个点的RGB信息写入内存 如果动态的修改了这些颜色信息 那绘制出来的图片就会改变.  修改图片的颜色值其实在很多地方都有用处,我记得以前我做J2ME游戏开发的时候 因为手机本身内存比较低 不能同时在内存中加载过多的图片 比如 在打怪的时候 玩家肯定不希望每次看到的怪物都一样 在不加大内存的情

Android编程实现基于BitMap获得图片像素数据的方法_Android

本文实例讲述了Android编程实现基于BitMap获得图片像素数据的方法.分享给大家供大家参考,具体如下: 网上看到的参考是: int[] pixels = new int[bit.getWidth()*bit.getHeight()];//保存所有的像素的数组,图片宽×高 bit.getPixels(pixels,0,bit.getWidth(),0,0,bit.getWidth(),bit.getHeight()); for(int i = 0; i < pixels.length; i+

android Matrix实现图片随意放大缩小或拖动

本文实例为大家分享了android Matrix图片随意放大缩小和拖动的具体代码,供大家参考,具体内容如下 step1:新建一个项目DragAndZoom,并准备一张照片放在res/drawable-hdpi目录下,如下图所示: step2: 设置应用的UI界面,在main.xml中设置: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://

Android实现手势滑动多点触摸放大缩小图片效果_Android

网上文章虽多,但是这种效果少之又少,我真诚的献上以供大家参考 实现原理:自定义ImageView对此控件进行相应的layout(动态布局). 这里你要明白几个方法执行的流程: 首先ImageView是继承自View的子类.onLayout方法:是一个回调方法.该方法会在在View中的layout方法中执行,在执行layout方法前面会首先执行setFrame方法.setFrame方法:判断我们的View是否发生变化,如果发生变化,那么将最新的l,t,r,b传递给View,然后刷新进行动态更新UI

关于android多点触控放大缩小图片请教个问题

问题描述 关于android多点触控放大缩小图片请教个问题 图片是通过sd卡读取的,怎么能初始化在中心啊,怎样把图片放大缩小设定最大最小值,有相关demo吗.谢谢 解决方案 ImageView有个参数设定,可以居中显示 android:scaleType="center"

Android实现旋转,放大,缩小图片的方法_Android

本文实例讲述了Android实现旋转,放大,缩小图片的方法.分享给大家供大家参考,具体如下: 项目中需要做到一个预览图片的功能 最初设想自定义个一个view,在onDraw中用的是生成新的Bitmap,来放大,缩小 但由于手机内存是有限制的,在放大几倍以后,就会core掉. 后面直接选用imageview来完成此项任务,很遗憾,虽然不会重复生成bitmap导致core掉,但是imageview的大小限制是图片无法再放大或放大也只能在这个区域中. 最后选定用 当然  Drawable来做了 pri

Android实现ImageView图片双击放大及缩小_Android

本文实例介绍了Android实现ImageView图片双击放大及缩小的相关技巧,分享给大家供大家参考,具体内容如下 public class DoubleScaleImageView extends ImageView implements OnTouchListener, OnGlobalLayoutListener { private boolean isFirst = false; private float doubleScale;// 双击放大的值 private Matrix mSc

Android利用BitMap获得图片像素数据的方法_Android

本文实例讲述了Android利用BitMap获得图片像素数据的方法.分享给大家供大家参考,具体如下: 网上看到的参考是: int[] pixels = new int[bit.getWidth()*bit.getHeight()];//保存所有的像素的数组,图片宽×高 bit.getPixels(pixels,0,bit.getWidth(),0,0,bit.getWidth(),bit.getHeight()); for(int i = 0; i < pixels.length; i++){

Android编程实现基于BitMap获得图片像素数据的方法

本文实例讲述了Android编程实现基于BitMap获得图片像素数据的方法.分享给大家供大家参考,具体如下: 网上看到的参考是: int[] pixels = new int[bit.getWidth()*bit.getHeight()];//保存所有的像素的数组,图片宽×高 bit.getPixels(pixels,0,bit.getWidth(),0,0,bit.getWidth(),bit.getHeight()); for(int i = 0; i < pixels.length; i+