`

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);
    }
    
}

 

1
0
分享到:
评论

相关推荐

    Android最简单的代码中动态设置图片的大小(自动缩放),位置

    Android代码中动态设置图片的大小(自动缩放),位置

    android开发揭秘PDF

    5.2.8 图像像素操作 5.2.9 Shader类介绍 5.2.10 双缓冲技术 5.2.11 全屏显示 5.2.12 获得屏幕属性 5.3 动画实现 5.3.1 Tween动画 5.3.2 Frame动画 5.3.3 GIF动画播放 5.4 小结 第6章 Android数据存储 6.1 Android...

    Android绘图板源代码

    这是本人的毕设,源码大公开。Android2.2以上,只在480*848的屏幕上测试过,其他屏幕的不保证。实现的功能包括: 绘制效果 ...1.实现了图片预览和图片浏览器 2.可以删除图片、分享图片和重新编辑图片

    《Android应用开发揭秘》附带光盘代码.

     5.2.8 图像像素操作  5.2.9 Shader类介绍  5.2.10 双缓冲技术  5.2.11 全屏显示  5.2.12 获得屏幕属性  5.3 动画实现  5.3.1 Tween动画  5.3.2 Frame动画  5.3.3 GIF动画播放  5.4 小结  第6章 Android...

    Android 实现加载大图片的方法

    项目简介: 该项目为加载大图片 详细介绍: 对于超大的图片,如果不缩放的话,容易导致内存溢出。而经过处理后,无论多大的... 2).Android中保存图片是用ARGB保存的,A表示阿尔法透明度,所以一个像素点占用了4个字节

    Android应用开发揭秘pdf高清版

    5.2.8 图像像素操作 5.2.9 Shader类介绍 5.2.10 双缓冲技术 5.2.11 全屏显示 5.2.12 获得屏幕属性 5.3 动画实现 5.3.1 Tween动画 5.3.2 Frame动画 5.3.3 GIF动画播放 5.4 小结 第6章 Android数据存储 6.1 Android...

    《Android应用开发揭秘》源码

     5.2.8 图像像素操作  5.2.9 Shader类介绍  5.2.10 双缓冲技术  5.2.11 全屏显示  5.2.12 获得屏幕属性  5.3 动画实现  5.3.1 Tween动画  5.3.2 Frame动画  5.3.3 GIF动画播放  5.4 小结  第6章 Android...

    Android图像处理实例解析

    主要实现动态修改图像的色相、饱和度及亮度,颜色矩阵,图像像素点调整、图像矩阵实现图像的平移缩放等,Xfermode相关知识点,渐变相关,图像倒影,像素块的坐标变化等等。 博客地址:...

    Android图片压缩方法并压缩到指定大小

    本文给大家分享android图片压缩的三种方法并压缩到指定大小,非常不错,具有参考借鉴价值,需要的的朋友参考下吧

    Android实现图片压缩示例代码

    核心思想是通过BitmapFactory.Options来缩放图片,主要是用到了它的inSampleSize参数(采样率) 当inSampleSize为1的时候,采样后的图片大小为图片的原始大小; 当inSampleSize为2的时候,采样后的图片的宽和高是...

    android群雄传

    6.5 Android图像处理之色彩特效处理 122 6.5.1 色彩矩阵分析 122 6.5.2 Android颜色矩阵——ColorMatrix 128 6.5.3 常用图像颜色矩阵处理效果 131 6.5.4 像素点分析 134 6.5.5 常用图像像素点处理效果 135 6.6...

    css实现0.5像素的边框的示例代码

    公司的设计师在做设计图的时候都是以iphone6(宽为750物理像素)为基准进行设计的。...CSS3有缩放的属性,我们可以利用这个属性,缩小50%的1px的边框,来实现这个功能,具体实现代码如下 &lt;div cla

    修改系统density、densityDpi适配

    修改density(屏幕密度,若每英寸有160像素点,该值就为1)、scaleDensity(字体缩放比例),densityDpi(屏幕上每英寸有多少像素点,如160)的值,就是修改系统内部对于目标尺寸而言的像素密度。 二、追根溯源 每个...

    计算机视觉 Project2:图像滤波与人像美颜

    了解并学习OpenCV的Python第三方库——opencv-python中实现读取图像、图像缩放、图像滤波、显示图像、保存图像等功能的函数。2.编写算法,对所给图像进行均值滤波,改变kernel的大小,得到不同的美颜图片,并进行...

    Android UI规范

    Android UI设计规范文档 1 设计原则 2 风格 2.1 设备和显示 Android 驱动了数百万的手机、平板和其它设备,兼容了各种屏幕宽度和比例。利用 Android 灵活的布局系统,您可以创造出从平板到手机都看起来很优雅的应用...

    Android高性能照片浏览器

    1.图片浏览放大缩小。 2.单一图片点击,放大效果,和缩放效果。 3.列表图片点击,放大效果,和缩放效果。 4.网格图片点击,放大效果,和缩放效果。 5.增加列表混合布局 6.加入缩略图和原图加载过程--&gt; 加入高清图...

    JqueryMobile + photoswipe4.1.1 实现图片轮播

    为了解决这些问题,做了一个DEMO,利用photoswipe4.1.1 + JQM 实现了图片轮播。 同时也修改了一些photoswipe4.1.1的源码和样式,供参考。 Demo花了半天精力才解决。 Tips:图片最好不要大于2000像素,推荐1800以内,...

Global site tag (gtag.js) - Google Analytics