`

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开发中,图片缩放是一项常见的需求,特别是在ImageView组件中展示大图时,用户可能需要通过手势来放大或缩小图片以查看细节。本篇将详细介绍如何在Android中实现图片的缩放功能,特别是利用ImageView结合...

    Android像素转换dp转px或相反

    在Android开发中,像素(px)和密度独立像素(dp/dip)是两个重要的尺寸单位。理解它们之间的转换关系对于创建适配不同设备屏幕的UI至关重要。本文将深入探讨Android像素转换,包括dp转px以及px转dp的方法,并提供...

    android图片缩放放大

    在Android开发中,图片的缩放和放大是一个常见的需求,特别是在设计用户界面或者处理图像时。这个"android图片缩放、放大demo"可能是提供了一个实际的项目实例,用于展示如何在Android应用程序中实现图片的动态调整...

    可以缩放的图片 android

    在Android开发中,图片缩放和平移是一项基本且重要的技能,尤其对于开发涉及图像查看、编辑或者地图应用的开发者来说。本示例提供了一个适用于初学者的实例,它展示了如何在Android平台上实现图片的自由缩放和平移...

    android实现将图片以ascall码形式展现

    在Android平台上,将图片转换为ASCII艺术是一种独特的视觉呈现方式,它通过将图像像素与不同ASCII字符对应,形成一种文字图像。本项目标题"android实现将图片以ascall码形式展现"表明我们要讨论如何在Android应用中...

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

    本文将详细介绍如何通过代码实现对`ImageView`控件内的图片进行动态调整,包括位置的设定以及图片的自动缩放功能。 #### 布局文件配置 首先,我们需要在XML布局文件中定义一个`ImageView`控件,该控件用于显示图片...

    Android-Android加载大图可以高清显示10000*10000像素的图片轻松实现微博长图功能

    在Android开发中,处理大图是一项挑战,尤其是像10000*10000像素这样的超大尺寸图片。这些图片如果直接在内存中加载,可能导致OOM(Out of Memory)异常,严重影响应用的性能和稳定性。为了解决这个问题,开发者需要...

    Android实现图片单点旋转缩放保存-仿百度魔图

    在Android平台上,实现图片的单点旋转和缩放并保存是一项常见的需求,尤其在开发图像编辑应用时。本文将深入探讨如何实现这个功能,模仿百度魔图的效果。 首先,我们需要理解Android中的ImageView组件。ImageView是...

    Android Matrix处理ImageView中图片缩放,平移

    总的来说,Android中的Matrix类提供了丰富的图像变换功能,结合ImageView和Bitmap,我们可以实现各种复杂的图像操作,如缩放和平移。理解并熟练运用Matrix,可以极大地提升Android应用中图像处理的灵活性和用户体验...

    android图片放大缩小 ImageView

    3. **手势缩放**: 在Android中,我们可以通过GestureDetector和ScaleGestureDetector来检测用户的捏合手势,实现图片的放大和缩小。ScaleGestureDetector可以检测到缩放手势,获取到缩放的中心点和比例因子,然后...

    Android图片放大缩小旋转完美demo

    本文将基于标题"Android图片放大缩小旋转完美demo"和描述,深入探讨Android中如何实现图片的触摸缩放、旋转以及在网络环境下的加载,同时会提及到使用ViewPager展示图片的功能。 首先,Android提供了一些基本的图像...

    android图片放大缩小(绝对好用)

    在Android开发中,处理图片的放大与缩小是一项常见的任务,特别是在设计用户界面或者进行图像处理时。本篇文章将深入探讨Android平台下如何有效地对图片进行缩放操作,并提供一种绝对好用的解决方案。 首先,我们...

    android自定义实现比例缩放的layout

    标题中的"android自定义实现比例缩放的layout"指的是创建一个自定义的Android布局类,它能够根据不同的屏幕尺寸和密度自动调整其子视图的大小,以保持内容的比例一致。这样的布局有助于确保用户在大屏或小屏设备上都...

    Android实现图片360度全景

    在Android中实现全景图,首先需要理解图像的基本概念,如像素、位图和矢量图。全景图通常是通过多个二维图像拼接而成的,因此要掌握图像的合并和变换技术。 2. 图像拼接: 实现360度全景的关键步骤是将多张照片...

    NV21图像旋转、平移、缩放、画矩形的C++实现

    本文将深入探讨如何使用C++来实现NV21图像的旋转、平移、缩放以及画矩形的操作。 首先,我们需要了解NV21格式。NV21是一种YUV420sp(planar)格式,它由一个Y分量(亮度)平面和两个交错的UV分量(色度)平面组成。...

    android手势缩放和拖拽图片

    在Android开发中,实现手势缩放和拖拽图片的功能是一项常用且重要的技能,尤其是在创建自定义图片查看器或相册应用时。以下将详细介绍如何在Android应用中实现这些功能。 一、手势识别基础 Android提供了` ...

    Android实现图片边缘拉伸.zip

    本教程将聚焦于"Android实现图片边缘拉伸"这一主题,通过分析提供的`ImageSplitter.java`源代码,我们将深入理解如何在Android中实现图片的边缘拉伸效果。 首先,边缘拉伸通常用于实现视图的动态扩展,例如,当用户...

    Android源码——ImageView控件缩放和旋转图片源码.zip

    本篇文章将深入探讨Android源码中关于ImageView控件如何实现图片的缩放和旋转功能。 首先,我们需要理解Android系统如何处理图片显示。在Android中,Bitmap类是图像数据的主要载体,它包含了像素数据以及相关的图像...

    Android图片缩放全功能

    在Android开发中,图片处理是一项常见且重要的任务,特别是在用户界面设计和图像显示方面。"Android图片缩放全功能"这个主题涵盖了Android平台下对图片进行高效、灵活缩放的各种技术与策略。以下是对这个话题的详细...

    Android平台上的图像编辑软件

    总的来说,"Android平台上的图像编辑软件"涵盖了Android图像处理的多个方面,包括基础操作、特效实现、用户体验设计等。开发者不仅可以从源码中学习到如何构建一个完整的图像编辑应用,还能深入理解Android图像处理...

Global site tag (gtag.js) - Google Analytics