- 浏览: 274427 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
tonytony3:
THANK YOU
Android多级树形菜单的实现 -
haiyang08101:
deleteNumber = "421f481e-7 ...
java对xml文件做增删改查 -
求求你帮帮我:
怎么把我的空格也当成节点处理了?
java对xml文件做增删改查 -
求求你帮帮我:
deleteNumber = "421f481e-7 ...
java对xml文件做增删改查 -
lpj13579:
多谢分享,学习学习
高仿小米盒子UI效果实现
自定义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); } }
发表评论
-
Android 三大图片加载框架比较
2016-11-30 10:31 11041.哪三大图片加载框架? 1) Pi ... -
仿微信小视屏拍摄的进度条/自定义的progressBar的样式。
2016-08-20 00:25 1041今天有个需求,就是需要倒计时的进度条,样式参考微信小视屏拍摄 ... -
android 闹钟定时任务 AlarmManager
2016-06-02 13:41 1848直接上代码 package com.exampl ... -
android应用实现重启系统
2016-06-02 13:33 35351.在AndroidManifest.xml文件的manif ... -
android 每天定时提醒功能实现
2016-06-01 22:42 0android要实现定时的功 ... -
Java Calendar 类的时间操作
2016-06-01 21:02 673ava Calendar 类时间操作,这也许是创建日历和管理 ... -
android中fragment和activity之间相互通信
2014-11-13 16:25 1450在用到fragment的时候,老是会遇到一个问题,就是fra ... -
墨迹天气上下滑动viewpager
2014-11-04 17:15 778墨迹天气上下滑动viewpager -
Android杂谈--打开文件的Intent及使用
2014-10-25 13:03 653在写文件管理系统时会用到各种打开不同格式的文件的需求,由于A ... -
获取Android签名证书的sha1值
2014-08-23 23:14 680前言:今天开始研 ... -
java中Keytool的使用总结
2014-08-23 22:40 569J2SDK提供了keytool命令行工具,可以根据指定的参数 ... -
android获取versionName和versionCode
2014-07-08 18:02 746<TextView android:textSize= ... -
Android如何防止apk程序被反编译
2014-07-08 17:22 717作为Android应用开发者,不得不面对一个尴尬的局面,就是 ... -
在GridView中实现单选或多选功能
2014-06-26 13:08 859由于项目需要,要用到GridView实现多选功能,在网上搜 ... -
Android中Tween动画和Frame动画实例
2014-06-26 10:46 732Animation主要有两种动画模式:Tween动画和Fra ... -
android 禁用和开启四大组件的方法(setComponentEnabledSetting )
2014-06-19 15:26 0为什么要关闭组件? 在用到组件时,有时候我们可能暂时性的不使 ... -
android MD5校验码的生成与算法实现
2014-06-17 10:58 902在Java中,java.security.Mes ... -
android 自动检测版本升级
2014-06-15 14:10 389这里我用别的app代替了,简单省事,正常的话,你要对你的 ... -
layout左右平滑控制.
2014-04-30 09:41 630<?xml version="1.0&quo ... -
android让你的TabHost滑动起来
2014-04-22 22:13 826在Android应用中,一般TabActivity和若干个T ...
相关推荐
在Android开发中,图片缩放是一项常见的需求,特别是在ImageView组件中展示大图时,用户可能需要通过手势来放大或缩小图片以查看细节。本篇将详细介绍如何在Android中实现图片的缩放功能,特别是利用ImageView结合...
在Android开发中,像素(px)和密度独立像素(dp/dip)是两个重要的尺寸单位。理解它们之间的转换关系对于创建适配不同设备屏幕的UI至关重要。本文将深入探讨Android像素转换,包括dp转px以及px转dp的方法,并提供...
在Android开发中,图片的缩放和放大是一个常见的需求,特别是在设计用户界面或者处理图像时。这个"android图片缩放、放大demo"可能是提供了一个实际的项目实例,用于展示如何在Android应用程序中实现图片的动态调整...
在Android开发中,图片缩放和平移是一项基本且重要的技能,尤其对于开发涉及图像查看、编辑或者地图应用的开发者来说。本示例提供了一个适用于初学者的实例,它展示了如何在Android平台上实现图片的自由缩放和平移...
在Android平台上,将图片转换为ASCII艺术是一种独特的视觉呈现方式,它通过将图像像素与不同ASCII字符对应,形成一种文字图像。本项目标题"android实现将图片以ascall码形式展现"表明我们要讨论如何在Android应用中...
本文将详细介绍如何通过代码实现对`ImageView`控件内的图片进行动态调整,包括位置的设定以及图片的自动缩放功能。 #### 布局文件配置 首先,我们需要在XML布局文件中定义一个`ImageView`控件,该控件用于显示图片...
在Android开发中,处理大图是一项挑战,尤其是像10000*10000像素这样的超大尺寸图片。这些图片如果直接在内存中加载,可能导致OOM(Out of Memory)异常,严重影响应用的性能和稳定性。为了解决这个问题,开发者需要...
在Android平台上,实现图片的单点旋转和缩放并保存是一项常见的需求,尤其在开发图像编辑应用时。本文将深入探讨如何实现这个功能,模仿百度魔图的效果。 首先,我们需要理解Android中的ImageView组件。ImageView是...
总的来说,Android中的Matrix类提供了丰富的图像变换功能,结合ImageView和Bitmap,我们可以实现各种复杂的图像操作,如缩放和平移。理解并熟练运用Matrix,可以极大地提升Android应用中图像处理的灵活性和用户体验...
3. **手势缩放**: 在Android中,我们可以通过GestureDetector和ScaleGestureDetector来检测用户的捏合手势,实现图片的放大和缩小。ScaleGestureDetector可以检测到缩放手势,获取到缩放的中心点和比例因子,然后...
本文将基于标题"Android图片放大缩小旋转完美demo"和描述,深入探讨Android中如何实现图片的触摸缩放、旋转以及在网络环境下的加载,同时会提及到使用ViewPager展示图片的功能。 首先,Android提供了一些基本的图像...
在Android开发中,处理图片的放大与缩小是一项常见的任务,特别是在设计用户界面或者进行图像处理时。本篇文章将深入探讨Android平台下如何有效地对图片进行缩放操作,并提供一种绝对好用的解决方案。 首先,我们...
标题中的"android自定义实现比例缩放的layout"指的是创建一个自定义的Android布局类,它能够根据不同的屏幕尺寸和密度自动调整其子视图的大小,以保持内容的比例一致。这样的布局有助于确保用户在大屏或小屏设备上都...
在Android中实现全景图,首先需要理解图像的基本概念,如像素、位图和矢量图。全景图通常是通过多个二维图像拼接而成的,因此要掌握图像的合并和变换技术。 2. 图像拼接: 实现360度全景的关键步骤是将多张照片...
本文将深入探讨如何使用C++来实现NV21图像的旋转、平移、缩放以及画矩形的操作。 首先,我们需要了解NV21格式。NV21是一种YUV420sp(planar)格式,它由一个Y分量(亮度)平面和两个交错的UV分量(色度)平面组成。...
在Android开发中,实现手势缩放和拖拽图片的功能是一项常用且重要的技能,尤其是在创建自定义图片查看器或相册应用时。以下将详细介绍如何在Android应用中实现这些功能。 一、手势识别基础 Android提供了` ...
本教程将聚焦于"Android实现图片边缘拉伸"这一主题,通过分析提供的`ImageSplitter.java`源代码,我们将深入理解如何在Android中实现图片的边缘拉伸效果。 首先,边缘拉伸通常用于实现视图的动态扩展,例如,当用户...
本篇文章将深入探讨Android源码中关于ImageView控件如何实现图片的缩放和旋转功能。 首先,我们需要理解Android系统如何处理图片显示。在Android中,Bitmap类是图像数据的主要载体,它包含了像素数据以及相关的图像...
在Android开发中,图片处理是一项常见且重要的任务,特别是在用户界面设计和图像显示方面。"Android图片缩放全功能"这个主题涵盖了Android平台下对图片进行高效、灵活缩放的各种技术与策略。以下是对这个话题的详细...
总的来说,"Android平台上的图像编辑软件"涵盖了Android图像处理的多个方面,包括基础操作、特效实现、用户体验设计等。开发者不仅可以从源码中学习到如何构建一个完整的图像编辑应用,还能深入理解Android图像处理...