android图标上面添加数字

合集下载

android 数组的用法

android 数组的用法

android 数组的用法一、概述数组是Android开发中常用的数据结构之一,用于存储一组相同类型的数据。

在Android中,数组可以用于存储用户输入、设备传感器数据、应用状态等。

本文将介绍Android中数组的基本用法、常用方法、常见问题及解决方案。

二、数组的声明和初始化在Android中,数组可以通过以下方式声明和初始化:1. 使用dataType[]的形式声明一个数组变量,例如int[] arr;2. 使用Arrays.fill()方法对数组进行初始化,例如Arrays.fill(arr,1);三、数组的常用方法Android中的数组可以使用以下方法进行操作:1. get(index):获取指定下标的元素值;2. set(index, value):设置指定下标元素的值为新值;3. length:获取数组的长度;4. toArray():将数组转换为指定类型的对象数组;5. clone():复制当前数组;6. equals(array):判断两个数组是否相等;7. reverse():反转数组元素顺序;8. sort():对数组进行排序。

四、数组的应用场景数组在Android开发中可以应用于以下场景:1. 存储用户输入数据:用户可以通过输入框输入一组数据,将其存储在数组中,以便后续处理和展示。

2. 存储传感器数据:设备传感器可以输出一组数据,将其存储在数组中,以便后续分析和应用。

3. 存储应用状态:可以将应用的一些状态信息存储在数组中,以便后续查询和使用。

五、常见问题及解决方案在使用数组时,可能会遇到以下问题及解决方案:1. 数组越界:在使用get()或set()方法时,需要注意下标是否越界,避免出现异常。

可以使用try-catch块来捕获异常并进行处理。

2. 重复元素:在使用sort()方法对数组进行排序时,需要注意避免重复元素的出现。

可以使用HashSet等数据结构来过滤重复元素。

3. 内存泄漏:在使用clone()方法复制数组时,需要注意避免内存泄漏。

数字APP图标常见尺寸与设计规范

数字APP图标常见尺寸与设计规范

6.2 数字APP图标常见尺寸与设计规范知识要点1.APP图标设计遵循的图标尺寸标准2.图标(iCON)设计规范3.按钮(Button)设计规范课程目标1.了解Android、ios系统图标的尺寸要求2.了解手机APP设计规范以及对于图片采用格式一、失之毫厘,谬以千里。

在手机APP图标设计中要严格遵循图标尺寸标准APP的图标(ICON)不仅指应用程序的启动图标,还包括状态栏、菜单栏或者是切换导航栏等位置出现的其他标识性图片,所以IOCN指的是所有这些图片的合集。

由于不同设备的屏幕密度不同,ICON也受这一密度制约。

a ndroid平台不同屏幕密度下图标的具体尺寸要求:在低、中、高和特高密度屏幕密度中,程序主界面、启动图标和菜单栏的尺寸分别为36X36、48X48、72X72、96X96;状态栏、列表显示、切换、标签和对话框尺寸为:24X24、32X32、48X48、72X72;根据不同屏幕密度来确定图标的具体尺寸,才能让用户得到更好的体验。

说过Android的图标。

iOS的图标,按手机、设备版本类型区分如下表不同版本的iPhone拥有不同尺寸分辨率的屏幕,所以其图标尺寸也有所区别。

APP Store中的启动图标无论哪个版本都是1024X1024;主屏幕图标1-3代为57X57,后面的为114X114;搜索图标1-3代为29X29,4-7普通版为58X58,plus版为87X87;标签栏1-3代为38X38,其他为75X75;工具栏和导航栏图标1-3代为30X30,4-7普通版本为44X44,plus为66X66。

需要提醒的是,在图标设计中请用栅格化系统进行设计。

如果设计尺寸为1024 x 1024 px,尽可能的采用黄金比例设计。

能让图标得到更好的显示效果。

二、手机APP设计规范指对整套APP界面进行视觉设计UI风格的统一,对界面元素的样式、颜色、图标按钮和大小设定统一的规范和使用原则。

方便以后协调合作和APP视觉迭代。

Android自定义View实现水平带数字百分比进度条

Android自定义View实现水平带数字百分比进度条

Android⾃定义View实现⽔平带数字百分⽐进度条这个进度条可以反映真实进度,并且完成百分⽐的⽂字时随着进度增加⽽移动的,所在位置也恰好是真实完成的百分⽐位置,效果如下:思路如下:第⼀部分是左侧的蓝⾊直线,代表已经完成的进度;第⼆部分是右侧灰⾊的直线,代表未完成的进度;第三部分是红⾊的百分⽐的数字百分⽐⽂本,显⽰当前确切的完成进度。

最关键的部分就是要确定百分⽐⽂本的确切位置,这⾥⽤了paint的getTextBounds⽅法,得到⽂本的宽⾼,然后再精确确定它的位置。

view代码如下:public class NumberProgressView extends View {/*** 进度条画笔的宽度(dp)*/private int paintProgressWidth = 3;/*** ⽂字百分⽐的字体⼤⼩(sp)*/private int paintTextSize = 20;/*** 左侧已完成进度条的颜⾊*/private int paintLeftColor = 0xff67aae4;/*** 右侧未完成进度条的颜⾊*/private int paintRightColor = 0xffaaaaaa;/*** 百分⽐⽂字的颜⾊*/private int paintTextColor = 0xffff0077;/*** Contxt*/private Context context;/*** 主线程传过来进程 0 - 100*/private int progress;/*** 得到⾃定义视图的宽度*/private int viewWidth;/*** 得到⾃定义视图的Y轴中⼼点*/private int viewCenterY;/*** 画左边已完成进度条的画笔*/private Paint paintleft = new Paint();/*** 画右边未完成进度条的画笔*/private Paint paintRight = new Paint();/*** 画中间的百分⽐⽂字的画笔private Paint paintText = new Paint();/*** 要画的⽂字的宽度*/private int textWidth;/*** 画⽂字时底部的坐标*/private float textBottomY;/*** 包裹⽂字的矩形*/private Rect rect = new Rect();/*** ⽂字总共移动的长度(即从0%到100%⽂字左侧移动的长度)*/private int totalMovedLength;public NumberProgressView(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;// 构造器中初始化数据initData();}/*** 初始化数据*/private void initData() {//设置进度条画笔的宽度int paintProgressWidthPx = Utils.dip2px(context, paintProgressWidth);//设置百分⽐⽂字的尺⼨int paintTextSizePx = Utils.sp2px(context, paintTextSize);// 已完成进度条画笔的属性paintleft.setColor(paintLeftColor);paintleft.setStrokeWidth(paintProgressWidthPx);paintleft.setAntiAlias(true);paintleft.setStyle(Style.FILL);// 未完成进度条画笔的属性paintRight.setColor(paintRightColor);paintRight.setStrokeWidth(paintProgressWidthPx);paintRight.setAntiAlias(true);paintRight.setStyle(Style.FILL);// 百分⽐⽂字画笔的属性paintText.setColor(paintTextColor);paintText.setTextSize(paintTextSizePx);paintText.setAntiAlias(true);paintText.setTypeface(Typeface.DEFAULT_BOLD);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);getWidthAndHeight();}/*** 得到视图等的⾼度宽度尺⼨数据*/private void getWidthAndHeight() {//得到包围⽂字的矩形的宽⾼paintText.getTextBounds("000%", 0, "000%".length(), rect);textWidth = rect.width();textBottomY = viewCenterY + rect.height() / 2;//得到⾃定义视图的⾼度int viewHeight = getMeasuredHeight();viewWidth = getMeasuredWidth();viewCenterY = viewHeight / 2;totalMovedLength = viewWidth - textWidth;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//得到float型进度float progressFloat = progress / 100.0f;//当前⽂字移动的长度float currentMovedLentgh = totalMovedLength * progressFloat;//画左侧已经完成的进度条,长度为从Veiw左端到⽂字的左侧canvas.drawLine(0, viewCenterY, currentMovedLentgh, viewCenterY, paintleft);//画右侧未完成的进度条,这个进度条的长度不是严格按照百分⽐来缩放的,因为⽂字的长度会变化,所以它的长度缩放⽐例也会变化 if (progress < 10) {canvas.drawLine(currentMovedLentgh + textWidth * 0.5f, viewCenterY, viewWidth, viewCenterY, paintRight);} else if (progress < 100) {canvas.drawLine(currentMovedLentgh + textWidth * 0.75f, viewCenterY, viewWidth, viewCenterY, paintRight);} else {canvas.drawLine(currentMovedLentgh + textWidth, viewCenterY, viewWidth, viewCenterY, paintRight);}//画⽂字(注意:⽂字要最后画,因为⽂字和进度条可能会有重合部分,所以要最后画⽂字,⽤⽂字盖住重合的部分)canvas.drawText(progress + "%", currentMovedLentgh, textBottomY, paintText);}/*** @param progress 外部传进来的当前进度*/public void setProgress(int progress) {this.progress = progress;invalidate();}}调⽤者activity的代码,设置进度条的进度:public class NumberProgressBarActivity extends Activity {protected static final int WHAT_INCREASE = 1;private NumberProgressView np_numberProgressBar;private int progress;private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {progress++;np_numberProgressBar.setProgress(progress);handler.sendEmptyMessageDelayed(WHAT_INCREASE, getRadomNumber(50, 200));if (progress >= 100) {handler.removeMessages(WHAT_INCREASE);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_number_progress_bar);np_numberProgressBar = (NumberProgressView) findViewById(R.id.np_numberProgressBar);Button btn_numberProgressBar = (Button) findViewById(R.id.btn_numberProgressBar);btn_numberProgressBar.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {increase();}});}private void increase() {progress = 0;np_numberProgressBar.setProgress(0);handler.removeMessages(WHAT_INCREASE);handler.sendEmptyMessage(WHAT_INCREASE);}/*** 得到两个整数之间的⼀个随机数** @param start 较⼩的数* @param end 较⼤的数* @return*/public int getRadomNumber(int start, int end) {return (int) (start + Math.random() * (end - start));}}⼯具⽅法:/*** 将dip或dp值转换为px值,保证尺⼨⼤⼩不变*/public static int dip2px(Context context, float dipValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dipValue * scale + 0.5f);}/*** 将sp值转换为px值,保证⽂字⼤⼩不变*/public static int sp2px(Context context, float spValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;return (int) (spValue * fontScale + 0.5f);}布局:<LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.example.viewdemo.view.NumberProgressViewandroid:id="@+id/np_numberProgressBar"android:layout_width="wrap_content"android:layout_height="100dp"android:layout_margin="20dp"android:background="#33890075"/><Buttonandroid:id="@+id/btn_numberProgressBar"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始"/></LinearLayout>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

安卓手机如何修改状态栏信号、WIFI、电量图标

安卓手机如何修改状态栏信号、WIFI、电量图标

准备工具:re文件管理器RE管理器+rootexplorer.apk (1.95 MB)装备素材:双卡双待版九尾狐信号+双卡单待版九尾狐信号+天气彩云电量+彩色翅膀wifl+ 单卡版九尾狐信号手机必须root教程开始:1.打开re,进入根目录,找到(system-app),app里面有一个名称为(systemUi.apk)我们先备份以防万一阿没备份的坏了别找我!别再给我说没备份!!!然后我们长按他点击全部提取2.全部提取过后我们进去他提示的目录出现个文件夹systemUi我们点进入systemUi-res-(drawable-hdpi)3.我们进入drawable-hdpi后找到手机信号放到这先不管将你准备替换的图标素材的名字改成系统自带图标的名字,也就是drawable-hdip里面相对应图标的名字,只有图标名称一模一样进行替换系统才能识别出来,改好之后复制到drawable-hdip里面进行图标覆盖,名字一样的话肯定会提示,然后全部覆盖就行了。

4.替换后我们按返回,直到返回到我们刚才提取的文件夹,就是systemUi文件夹,然后长按他,选择创建zip文件5.创建完成后进入提示目录,我们会看到一个文件systemUi.zip,我们长按他,选择重命名,把zip改为apk,就是systemUi.apk,然后长按他点击复制。

6.然后我们返回到根目录,把上边挂在只读改为读写然后复制到根目录,长按它修改权限3,1(见图1),(有的手机权限是2.1.2)(见图2),(有的手机权限是3.3.1)(见图3)修改完权限后移动,进入system-app然后粘贴。

提示是否覆盖点确定。

最后自己手动重启手机(或者手机自动重启)。

Android图表库之MPAndroidChart使用技巧(基于v3.1.0版本)

Android图表库之MPAndroidChart使用技巧(基于v3.1.0版本)

Android图表库之MPAndroidChart使⽤技巧(基于v3.1.0版本)MPAndroidChart:⼀个强⼤的Android图表视图/图形视图库,⽀持线-柱-饼-雷达-⽓泡-散点-烛台图表以及缩放,拖动和动画。

可实现但不限于如下图表效果♠折线图(LineChart)♠柱状图(BarChart)♠饼状图(PieChart)♠散点图(ScatterChart)♠烛台图(CandleStickChart)♠⽓泡图(BubbleChart)♠雷达图(RadarChart)♠联合图(Combined-Chart)开始使⽤1、添加库repositories {maven { url 'https://jitpack.io' }}dependencies {implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'}2、创建View//静态布局<com.github.mikephil.charting.charts.LineChartandroid:id="@+id/chart"android:layout_width="match_parent"android:layout_height="match_parent" />/*************************或*************************///动态布局LineChart chart = new LineChart(context);3、设置表属性/交互(不设置则采⽤默认值)Description description = new Description();//描述信息description.setEnabled(false);//是否可⽤chart.setDescription(description);//不然会显⽰默认的 Description。

微博角标怎么设置方法

微博角标怎么设置方法

微博角标怎么设置方法微博角标是指在微博应用程序图标上显示的小红点或数字,用来提示用户有新的消息或通知未读。

下面我将为您详细介绍微博角标的设置方法。

一、Android平台上的微博角标设置方法:1. 在AndroidManifest.xml文件中注册角标服务。

在<application>标签内添加以下代码:<serviceandroid:name="[您的自定义服务类名]"android:exported="true"android:permission="uncher.permission.INSTALL_SHORT CUT"><intent-filter><action android:name="com.tencent.sibo.QUERY_SDK"/> </intent-filter></service>2. 创建一个自定义的服务类。

在Java代码中创建您的自定义服务类,该类需要继承至`android.app.Service`。

在该类的`onStartCommand()`方法中,使用`startForeground()`方法启动前台服务,并设置角标的内容和点击事件。

public class MyBadgeService extends Service {@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { 设置角标的内容和点击事件setBadgeContent("1", "启动前台服务startForeground(1, new Notification());return super.onStartCommand(intent, flags, startId);}private void setBadgeContent(String badgeNumber, String clickUrl) {设置角标的内容和点击事件Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(clickUrl));PendingIntent pendingIntent =PendingIntent.getActivity(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);ShortcutBadger.applyCount(getApplicationContext(), Integer.parseInt(badgeNumber));ShortcutBadger.applyNotification(getApplicationContext(), new Notification.Builder(this).setContentTitle("新消息").setContentText("您有" + badgeNumber + "条新消息").setSmallIcon(R.drawable.icon_notification).setContentIntent(pendingIntent).build());}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}}3. 在合适的位置启动您的自定义服务。

android创建状态栏通知

android创建状态栏通知

创建状态栏通知状态栏通知会向系统状态栏添加一个图标(还可以附有文本消息)以及一条“通知”窗口内的可扩展消息。

当用户选择了该可扩展消息,Android发出一个有通知定义的Intent(通常来启动一个活动)。

也可以设置通知来以声音、振动和设备闪光来提醒用户。

状态栏通知应当被用于任何后台服务需要提示用户发生了事件并要求回应的情况。

后台服务不应自己启动活动来接收用户交互操作。

它应当创建一个状态栏通知,在用户选择该通知时启动一个活动。

下面的截图展示了一个左侧有通知图标的状态栏。

下一张截图展示了“通知”窗口中扩展的通知消息。

将状态栏下拉可展开通知窗口(或从主页面选项菜单中选择“通知”)。

基本内容活动或是服务可以初始化一个状态栏通知。

由于一个活动只有在其状态是活动的且处于焦点时才能执行行动,所以应当通过服务来创建状态栏通知。

这样,通知就能从后台创建,即使用户在使用另一个程序或是设备处于休眠状态。

要创建通知,必须使用两个类:Notification和NotificationManager。

使用Notification类的一个实例来定义状态栏通知的属性,例如状态栏图标,扩展消息,或要播放的音效等更多内容。

NotificationManager是一个Android系统服务,它执行并管理所有Notification。

不必实例化NotificationManager。

为了传递Notification,必须通过getSystemService()获取NotificationManager的一个引用,之后再希望通知用户时,使用notify()将其传递给自己的Notification对象。

要创建一个状态栏通知:1.获取NotificationManager的一个引用String ns = Context.NOTIFICATION_SERVICE;NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);2.实例化Notification:int icon = R.drawable.notification_icon;CharSequence tickerText = "Hello";long when = System.currentTimeMillis();Notification notification = new Notification(icon, tickerText, when);3.定义Notification的扩展消息和Intent:Context context = getApplicationContext();CharSequence contentTitle = "My notification";CharSequence contentText = "Hello World!";Intent notificationIntent = new Intent(this, MyClass.class);PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);4.将Notification传递给NotificationManager:private static final int HELLO_ID = 1;mNotificationManager.notify(HELLO_ID, notification);这样之后,用户将收到通知。

android图片加水印,文字

android图片加水印,文字

android图片加水印,文字两种方法:1.直接在图片上写文字String str = "PICC要写的文字";ImageView image = (ImageView) this.findViewById(R.id.ImageView); Bitmap photo = BitmapFactory.decodeResource(this.getResources(), R.drawable.text);int width = photo.getWidth(), hight = photo.getHeight();System.out.println("宽"+width+"高"+hight);icon = Bitmap.createBitmap(width, hight,Bitmap.Config.ARGB_8888); //建立一个空的BItMapCanvas canvas = new Canvas(icon);//初始化画布绘制的图像到icon上Paint photoPaint = new Paint(); //建立画笔photoPaint.setDither(true); //获取跟清晰的图像采样photoPaint.setFilterBitmap(true);//过滤一些Rect src = new Rect(0, 0, photo.getWidth(), photo.getHeight());//创建一个指定的新矩形的坐标Rect dst = new Rect(0, 0, width, hight);//创建一个指定的新矩形的坐标canvas.drawBitmap(photo, src, dst, photoPaint);//将photo 缩放或则扩大到 dst使用的填充区photoPaintPaint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG |Paint.DEV_KERN_TEXT_FLAG);//设置画笔textPaint.setTextSize(20.0f);//字体大小textPaint.setTypeface(Typeface.DEFAULT_BOLD);//采用默认的宽度textPaint.setColor(Color.RED);//采用的颜色//textPaint.setShadowLayer(3f, 1,1,this.getResources().getColor(android.R.color.background_dark));//影音的设置canvas.drawText(str, 20, 26, textPaint);//绘制上去字,开始未知x,y采用那只笔绘制canvas.save(Canvas.ALL_SAVE_FLAG);canvas.restore();image.setImageBitmap(icon);saveMyBitmap(icon);2.将两个图片合成onCreat方法里面{Bitmap mark =BitmapFactory.decodeResource(this.getResources(), R.drawable.icon); Bitmap photo =BitmapFactory.decodeResource(this.getResources(), R.drawable.text);Bitmap a = createBitmap(photo,mark);image.setImageBitmap(a);saveMyBitmap(a);}private Bitmap createBitmap( Bitmap src, Bitmap watermark ){String tag = "createBitmap";// Log.d( tag, "create a new bitmap" );if( src == null ){return null;}int w = src.getWidth();int h = src.getHeight();int ww = watermark.getWidth();int wh = watermark.getHeight();//create the new blank bitmapBitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图Canvas cv = new Canvas( newb );//draw src intocv.drawBitmap( src, 0, 0, null );//在 0,0坐标开始画入src//draw watermark intocv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src 的右下角画入水印//save all clipcv.save( Canvas.ALL_SAVE_FLAG );//保存//storecv.restore();//存储return newb;}//保存图片到data下面public void saveMyBitmap(Bitmap bmp){FileOutputStream fos = null;try {fos = openFileOutput("image1.jpg", Context.MODE_PRIVATE); press(pressFormat.JPEG, 100, fos);} catch (FileNotFoundException e) {} finally {if (fos != null) {try {fos.flush();fos.close();} catch (IOException e) { }}}}。

android 数字键盘输入规则

android 数字键盘输入规则

在Android中,当您使用数字键盘进行输入时,有一些规则和约定需要遵循。

以下是一些常见的数字键盘输入规则:
1. 输入数字:您可以直接在数字键盘上点击所需的数字。

在输入数字时,不需要按下任何特定的字符或键,只需点击您需要的数字即可。

2. 输入特殊字符:在某些情况下,您可能需要输入特殊字符,例如小数点、加号、减号等。

这些特殊字符通常位于数字键盘的上方或下方。

您可以按住相应的键,直到出现所需的特殊字符列表,然后从中选择所需的字符。

3. 切换数字键盘和字母键盘:在某些情况下,您可能需要使用字母键盘进行输入。

要切换到字母键盘,请按下数字键盘左上角的“ABC”键。

要返回到数字键盘,请再次按下该键。

4. 自动完成:Android的键盘通常具有自动完成功能,可以预测您要输入的数字或字母序列。

当您输入一些字符时,自动完成功能将显示建议的选项,您可以从中选择所需的选项。

5. 删除和撤销:如果您输入了错误的数字或字符,可以使用键盘上的“Delete”键来删除最后一个字符。

如果您想撤销最近的输入,可以按下“Backspace”键。

6. 切换输入法:如果您使用的是第三方输入法,可以通过在设置中更改输入法来切换不同的输入法。

这些是常见的Android数字键盘输入规则。

请注意,不同的设备或输入法可能会有一些细微的差异。

android实现在图标上显示数字

android实现在图标上显示数字

android实现在图标上显⽰数字本⽂实例为⼤家分享了android实现在图标上显⽰数字的具体代码,供⼤家参考,具体内容如下效果图:动态显⽰当天的号数。

主要代码如下:import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.Typeface;import android.graphics.drawable.BitmapDrawable;/*** 图⽚上画⽂字** @author qhg* @date 2014年3⽉5⽇**/public class QNotifacationIcon {/*** 在给定的图⽚上添加⽂字** @param context* 上下⽂对象* @param resId* 图⽚资源ID* @param text* 需要显⽰的⽂字* @param textSize* ⽂字⼤⼩* @param color* ⽂字颜⾊* @param typeface* ⽂字字体* @param offsetX* ⽂字x的偏移量* @param offsetY* ⽂字y的偏移量* @return 带⽂字的图⽚*/public static Bitmap generatorContactIcon(Context context, int resId,String text, float textSize, int color, Typeface typeface,float offsetX, float offsetY) {// 根据id获取需要处理的图⽚Bitmap icon = ((BitmapDrawable) (context.getResources().getDrawable(resId))).getBitmap();int iconWidth = icon.getWidth();int iconHeight = icon.getHeight();// 初始化画布Bitmap contactIcon = Bitmap.createBitmap(iconWidth, iconHeight,Config.ARGB_8888);// 构建Canvas canvas = new Canvas(contactIcon);// 创建画笔Paint paint = new Paint();// 设定是否使⽤图像抖动处理,会使绘制出来的图⽚颜⾊更加平滑和饱满,图像更加清晰paint.setDither(true);// 如果该项设置为true,则图像在动画进⾏中会滤掉对Bitmap图像的优化操作,加快显⽰// 速度,本设置项依赖于dither和xfermode的设置paint.setFilterBitmap(true);// 截取整个图⽚,从左上⾓到右下⾓Rect src = new Rect(0, 0, iconWidth, iconHeight);// 截取的图⽚放在画布上的位置Rect dst = new Rect(0, 0, iconWidth, iconHeight);canvas.drawBitmap(icon, src, dst, paint);// 抗锯齿和使⽤本⾝的⽂本字距Paint numPaint = new Paint(Paint.ANTI_ALIAS_FLAG| Paint.DEV_KERN_TEXT_FLAG);// 设置⽂字颜⾊numPaint.setColor(color);// 设置⽂字⼤⼩numPaint.setTextSize(textSize);// 设置⽂字字体numPaint.setTypeface(typeface);// 将⽂字内容画在图⽚上,x和y的坐标这⾥直接计算了⽂字在图⽚上的宽⾼偏移⽐例canvas.drawText(text, iconWidth * offsetX, iconHeight * offsetY,numPaint);return contactIcon;}}数字字体⼤⼩会随屏幕⼤⼩⽽不适应,可以根据屏幕宽度然后动态缩放字体⽐例。

Android为应用添加数字角标的简单实现

Android为应用添加数字角标的简单实现

Android为应⽤添加数字⾓标的简单实现⾓标,英语是badge,也就是“徽章,像章,奖章;象征,标记”的意思。

效果图可以看到图中的环信单聊这个app右上⾓的红⾊的圆圈,⾥⾯有6这个数字的,就是⼀种⾓标。

⼀般来说,应⽤的⾓标是⽤来标记有多少条提醒(Notification)没读(unread),⼀旦点击提⽰进应⽤阅读了,⾓标也会消失。

⼀些必要的说明⾓标原本是苹果的iOS中的东西,Android原⽣并不⽀持⾓标,因为Google的意思是让⼤家⽤Notification(提⽰栏)即可,不过⽆妨,厉害的Android第三⽅⼚商可以通过在⾃定义的Launcher(启动器)中操作来实现添加⾓标。

原理添加⾓标的原理就是发送⼀个Broadcast(⼴播),在⼴播的Intent中指定需要被添加⾓标的应⽤的packageName(包名),className(类名),count(⾓标数⽬)。

当然了,不同⼚商的⼿机的⾓标操作的Intent的action是不⼀样的。

在AndroidManifest.xml中添加读取和写⼊⾓标的权限:<uses-permission android:name="com.sec.android.provider.badge.permission.READ" /><uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />设置⾓标和清除⾓标的⼯具类public class BadgeUtils {private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE";private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count";private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name";private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name";//设置⾓标public static void setBadgeCount(Context context, int badgeCount) {Intent intent = new Intent(INTENT_ACTION);intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount);intent.putExtra(INTENT_EXTRA_PACKAGENAME, getComponentName(context).getPackageName());intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, getComponentName(context).getClassName());context.sendBroadcast(intent);}//清除⾓标public static void removeBadge(Context context){setBadgeCount(context,0);}//获取ComponentNameprivate static ComponentName getComponentName(Context context) {return context.getApplicationContext().getPackageManager().getLaunchIntentForPackage(context.getApplicationContext().getPackageName()).getComponent();}}注意:完整demo下载地址:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

小米11青春版图标上数字怎么去除

小米11青春版图标上数字怎么去除
3、将应用后面的开关关闭即可。
本Байду номын сангаас以小米11青春版为例适用于MIUI 12系统
以上就是小编给大家带来的关于“小米11青春版图标上数字怎么去除”的全部内容了。
只要应用上有新的信息来的时候就会有数字标明那小米11青春版图标上数字怎么去除的呢让我们一起来看看吧
小米11青春版图标上数字怎么去除
只要应用上有新的信息来的时候,就会有数字标明,那小米11青春版图标上数字怎么去除的呢,让我们一起来看看吧。
1、打开手机设置,点击【通知与控制中心】。
2、点击【桌面角标】。

android random用法

android random用法

android random用法Android Random用法简介在Android开发中,Random类是一种用于生成随机数的工具类。

它提供了各种方法来生成不同类型的随机数,如整数、浮点数和布尔值。

以下是Random类常见的用法:1. 生成整数随机数使用nextInt()方法可生成一个指定范围内的随机整数。

例如,要生成介于0和9之间的随机整数,可以使用以下代码:```javaRandom random = new Random();int randomNumber = random.nextInt(10);```这段代码会生成一个0到9之间(包含0和9)的随机整数。

2. 生成浮点数随机数使用nextDouble()方法可生成一个0到1之间的随机浮点数。

例如,要生成一个0到1之间的随机浮点数,可以使用以下代码:```javaRandom random = new Random();double randomDouble = random.nextDouble();```3. 生成布尔值随机数使用nextBoolean()方法可生成一个随机的布尔值(true 或false)。

例如,要生成一个随机的布尔值,可以使用以下代码:```javaRandom random = new Random();boolean randomBoolean = random.nextBoolean();```这是生成一个随机的true或false的布尔值。

4. 改变随机种子Random类默认使用当前系统时间作为随机种子。

如果想要在每次运行时生成相同的随机数序列,可以通过指定种子(seed)的方式来实现。

例如,以下代码会生成相同的随机数序列:```javaRandom random = new Random(123); // 使用123作为随机种子int randomNumber = random.nextInt(10);```以上是Android Random类的一些常见用法。

android图标上面添加数字

android图标上面添加数字

android图标上面添加数字2011-09-13 15:08:27 我来说两句 0我要投稿 [字体:小大] 新建名为NotificationIconCount的Android Project。

首先修改AndroidManifest.xml,加入权限<uses-permissionandroid:name="android.permission.READ_CONTACTS"></uses-permission>,因为我们要读取联系人。

修改main.xml如下,这里定义一个ImageView,勇于预览我们处理好的加上数字的图标。

Xml代码<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:id="@+id/icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="center"android:adjustViewBounds="true"/></LinearLayout>先来获取手机内通讯录的图标,如果没有获取到,则使用该应用的图标.Java代码super.onCreate(savedInstanceState);setContentView(yout.main);mImageView=(ImageView)findViewById(R.id.icon);//优先采用联系人的图标,如果不存在则采用该应用的图标Drawable contactIcon;try {contactIcon =getPackageManager().getApplicationIcon("com.android.contacts");} catch (NameNotFoundException e) {contactIcon=null;}Bitmap icon;if(contactIcon instanceof BitmapDrawable){icon=((BitmapDrawable)contactIcon).getBitmap();}else{icon=getResIcon(getResources(), R.id.icon);}这里用到一个自定义的根据资源图标id获取图片的函数,很简单,代码如下:Java代码/*** 根据id获取一个图片* @param res* @param resId* @return*/private Bitmap getResIcon(Resources res,int resId){Drawable icon=res.getDrawable(resId);if(icon instanceof BitmapDrawable){BitmapDrawable bd=(BitmapDrawable)icon;return bd.getBitmap();}else{return null;}}获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。

Android APP界面标注

Android APP界面标注

Android APP界面标注、尺寸换算和APP标注工具众所周知,对追求高还原的移动APP产品来说,移动APP设计稿上的精确尺寸标记是必不可少的的一步。

很多设计师都抱怨APP程序员做的效果太差,跟设计图相差太多,你有没有提供最规范的Android APP界面标注尺寸呢?有没有提供设计师的UI设计规范给程序员呢?其实,作为一名移动APP设计师,这些我们都应该在于Android程序员沟通好的基础上,尽最大的努力为他们提供最全的设计规范和设计标注、测量等信息。

下面是某安卓设计师的实践和工作总结。

值得参考,也可以说是设计Android APP的最佳实践:1. 画布大小定位720 x 1280,72 dpi2. 只使用偶数单位的尺寸,比如96 px 的列表项高度,16 px 的边距,64 px 的图标边长3. 只使用24 pt,28 pt,36 pt 和44 pt 的字体4. 设计完成以后,所有尺寸的px 值除以2 作为dp 数值交给工程师5. 所有字体的pt 值除以2 作为sp 数值交给工程师6. 所有切图变成三份,分别是原始大小、缩小1.5 倍,缩小2 倍,分别作为xhdpi,hdpi,mdpi 的资源交给工程师具体的如下图:下面是一些解答你疑问的安卓术语啦!为什么要选择720*1280来作为设计稿,而且分辨率设置为72因为320 dpi 屏幕的分辨率最常见的是720 x 1280,以这个尺寸作为画布尺寸,是最带感的,这样的设计稿就和应用在最多数的320 dpi 的机器上运行起来的样子一样。

而且挑密度最大的,因为图片缩小比放大好,放大会失真,选320 dpi 作为目标屏幕,为其他屏幕提供图片时,只需要缩小。

72 dpi 是Photoshop 的默认设置,不要改就好,这个数字和后面的换算有关系。

Android 4.0 以后的设计规范中建议只使用四种字号,分别是12 sp,14 sp,18 sp 和22 sp,这也是Android framework 用到的全部字号。

Android实现控件右上角显示消息数量气泡(badge)

Android实现控件右上角显示消息数量气泡(badge)

Android实现控件右上⾓显⽰消息数量⽓泡(badge)现在qq或者微信,甚⾄微博都有⼀个功能,就是在⽤户有未读消息时,在桌⾯图标右上⾓显⽰⼀个红⾊的⼩⽓泡,⾥⾯显⽰未读消息数量,在桌⾯图标显⽰的功能主要是利⽤⼴播来通知launcher,具体实现⽹上有不少内容,本⽂简单介绍下在应⽤内部的实现;⾸先,右上的圆形⽓泡其实是⼀个textview,参考⽹上⼀个⽐较流⾏的开源代码(地址https:///stefanjauker/BadgeView),该项⽬提供了⼀个jar包,不过这种⼩功能应该代码量不多,打开源码发现就是⼀个⾃定义view类。

该扩展使⽤⽅法也相当简单,⾸先确定要添加⽓泡的view ,然后[java]1. final BadgeView badgeView = new BadgeView(this);2. badgeView.setTargetView(target);3. badgeView.setBadgeCount(3);显⽰效果如图:下⾯分析⼀下源码:[java]1. public class BadgeView extends TextView {2.3. private boolean mHideOnNull = true;4.5. public BadgeView(Context context) {6. this(context, null);7. }8.9. public BadgeView(Context context, AttributeSet attrs) {10. this(context, attrs, android.R.attr.textViewStyle);11. }12.13. public BadgeView(Context context, AttributeSet attrs, int defStyle) {14. super(context, attrs, defStyle);15.16. init();17. }该view的构造⽅法,其最终都调⽤了init()⽅法,这个⽅法主要是对本⾝设置了下layout属性,如下:[java]1. private void init() {2. if (!(getLayoutParams() instanceof LayoutParams)) {3. LayoutParams layoutParams =4. new LayoutParams(5. youtParams.WRAP_CONTENT,6. youtParams.WRAP_CONTENT,7. Gravity.RIGHT | Gravity.TOP);8. setLayoutParams(layoutParams);9. }10.11. // set default font12. setTextColor(Color.WHITE);13. setTypeface(Typeface.DEFAULT_BOLD);14. setTextSize(PLEX_UNIT_SP, 17);15. setPadding(dip2Px(5), dip2Px(1), dip2Px(5), dip2Px(1));16.17. // set default background18. setBackground(9, Color.parseColor("#d3321b"));19.20. setGravity(Gravity.CENTER);21.22. // default values23. setHideOnNull(true);24. setBadgeCount(0);25. }然后最为关键的就是设置targe view的⽅法,在这个⽅法⾥为⽬标view添加了当前的textview作为⽓泡:[java]1. public void setTargetView(View target) {2. if (getParent() != null) {3. ((ViewGroup) getParent()).removeView(this);4. }5.6. if (target == null) {7. return;8. }9.10. if (target.getParent() instanceof FrameLayout) {11. ((FrameLayout) target.getParent()).addView(this);12.13. } else if (target.getParent() instanceof ViewGroup) {14. // use a new Framelayout container for adding badge15. ViewGroup parentContainer = (ViewGroup) target.getParent();16. int groupIndex = parentContainer.indexOfChild(target);17. parentContainer.removeView(target);18.19. <strong> FrameLayout badgeContainer = new FrameLayout(getContext());</strong>20. youtParams parentLayoutParams = target.getLayoutParams();21.22. badgeContainer.setLayoutParams(parentLayoutParams);23. target.setLayoutParams(new youtParams(24. youtParams.MATCH_PARENT, youtParams.MATCH_PARENT));25.26. parentContainer.addView(badgeContainer, groupIndex, parentLayoutParams);27. badgeContainer.addView(target);28.29. badgeContainer.addView(this);30. } else if (target.getParent() == null) {31. Log.e(getClass().getSimpleName(), "ParentView is needed");32. }33.34. }很明显,这个扩展的实现⽅式就是frameLayout,当设置target时,根据target的⽗控件的类型进⾏不同的设置,⽐如,当⽗控件就是framelayout时,直接添加,当⽗控件不是frameLayout时,记录下target在⽗控件中的位置,[java]1. int groupIndex = parentContainer.indexOfChild(target);然后新建⼀个frameLayout,[java]1. FrameLayout badgeContainer = new FrameLayout(getContext());将target与⽓泡的textview⼀同添加进去,最后在添加到初始⽗控件的groupIndex位置就可以了。

Android开发轻松实现带文字的图片按钮

Android开发轻松实现带文字的图片按钮

Android开发轻松实现带文字的ImageButton实际上,ImageButton是不能添加文字的。

要实现带文字的ImageButton的方法很多,这里仅列举一种方法:自定义一个继承自ImageButton的类,然后Override它的onDraw(Canvas canvas)方法。

具体步骤如下:1)新建一个Android工程,例如工程名:TestImageButton。

怎么建工程?不用我多说了吧。

2)新建一个MyImageButton类,继承android.widget.ImageButton3)为类MyImageButton添加成员函数,详细代码如下:package ;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.ImageButton;public class MyImageButton extends ImageButton {public String text = null; //要显示的文字public float textX,textY; //文本显示的坐标位置public int color; //文字的颜色public MyImageButton(Context context, AttributeSet attrs) { super(context,attrs);textX=20;textY=60;}//设置需要显示的文本public void setText(String text){this.text = text; //设置文字}//设置文本显示的颜色public void setColor(int color){this.color = color; //设置文字颜色}// 设置显示文本的X、Y坐标public void setPosition(float XX,float YY){t extX = XX;t extY = YY;}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);Paint paint=new Paint();paint.setTextAlign(Paint.Align.CENTER);paint.setColor(color);canvas.drawText(text, textX, textY, paint); //绘制文字}}4)在布局文件中引用:<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:background="#9CFFC1"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><.MyImageButtona ndroid:id="@+id/button01"a ndroid:layout_width="wrap_content"a ndroid:layout_height="wrap_content"a ndroid:layout_marginLeft="25dp"a ndroid:background="@drawable/video1"/></LinearLayout>5)在启动Activity的onCreate方法中添加文字package ;import .MyImageButton;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;public class TestImageButtonActivity extends Activity {/** Called when the activity is first created. */private MyImageButton button01=null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);button01= (MyImageButton)findViewById(R.id.button01);button01.setText("视频文件1");button01.textX =25;button01.textY =65;button01.setColor(Color.rgb(147, 48, 4));}}最后,别忘了在工程目录testImageButton\res\drawable-hdpi下放置一个名为video1.png 的图片文件。

apns关于APP数字角标的理解

apns关于APP数字角标的理解

apns关于APP数字⾓标的理解 前两天群⾥有兄弟在吐槽,做远程推送的时候:⽼板要求APP桌⾯图标的右上⾓显⽰红⾊未读数字(数字⾓标)要精准,有多少未读通知就显⽰数字⼏;但是后台的弟兄在发送推送通知的时候,每次的⾓标是1,然后要移动端这边⾃⼰去把这个未读数字去累加,然后显⽰在APP上;并且后台⾮常固执的认为这个累加未读消息数量是在移动端处理的..... 这就尴尬了,碰到固执的队友,沟通不成的时候确实是很痛苦的! 这⾥我说说⾃⼰在做推送功能时候的这个⾓标的验证过程和理解,给后⾯的为碰到类似情况的同学⼀些参考。

随便截个图举个例⼦看看当APP是处于后台的时候,实现这个还是好说的,因为当推送通知到达的时候是可以监听到的,可以获取到推送信息⾥⾯的⾓标数字然后进⾏累加。

但是当APP完成退出后台的时候,想要app监听到通知并且读取通知信息设置⾓标,这个好像是办不到的!后台推送消息的格式按照苹果官⽅提供的格式,⼤致是这样:{"aps" : {"alert" : {"title" : "Game Request","body" : "Bob wants to play poker","action-loc-key" : "PLAY"},"badge" : 5},"acme1" : "bar","acme2" : [ "bang", "whiz" ]}“aps”格式是固定的,后⾯的"acme1", "acme2”是⾃定义的数据。

其中“badge"就是app的⾓标数字所以要证实APP的桌⾯红⾊⾓标(未读消息数字)到底是由后台控制的还是移动端⾃⼰控制的,这个很容易。

安卓状态栏添加显示网速教程

安卓状态栏添加显示网速教程

状态栏添加显示网速教程状态栏添加网速显示教程:以国行2.3为例1.反编译SystemUI.apk将网速显示.zip文件解压,将里面的文件复制到smali/com/android/systemui/statusbar/policy2.到res/layout/statusbar.xml 在<com.android.systemui.statusbar.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:paddingLeft="6.0dip"android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_alignParentLeft="true" />和<LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/statusIcons" android:paddingRight="6.0dip" android:layout_width="wrap_content"android:layout_height="fill_parent" android:layout_alignParentRight="true" />之间添加<com.android.systemui.statusbar.policy.Traffic android:textAppearance="@style/TextAppearance.StatusBar.Traffic" android:textColor="#ffffffff"(网速字体颜色**删除汉字及括号)android:gravity="right|center" android:id="@id/traffic" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />如图:以上上位置我已经调试好了!效果:我们还可以这样在代码里面添加相关代码,比如:1.android:textSize="12.0dip" 字体大小2.android:textStyle="bold" 字体显示为粗体3.android:textColor="#ffffffff" 字体颜色个人觉得12号字体加粗最适合defy/defy+!3.到res/values/ids.xml添加代码:<item type="id" name="traffic">false</item>4.到res/values/styles.xml最下面添加<style name="TextAppearance.StatusBar.Traffic" parent="@*android:style/TextAppearance.StatusBar.Icon"> <item name="android:textSize">14dp</item><item name="android:textStyle">normal</item><item name="android:textColor">#ffffffff</item></style>如图:5.OK,回编译,将回编译得到的classes.dex和status_bar.xml替换到原systemUI.apk中,在将修改好的systemUI.apk在sysytem文件夹给定权限644,替换到sysytem/app文件夹,重启即可所用材料:教程代码里面有汉字备注,自行删除!其他系统应该也可以按照教程添加网速显示,自己尝试,举一反三!教程代码里面有汉字备注,自行删除!其他系统应该也可以按照教程添加网速显示,自己尝试,举一反三!(注:以上教程及附件转自魔趣论坛小青年)如果不能下载,请按如下方法:右键点击网速显示.zip,选择打开超链接。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

android图标上面添加数字
2011-09-13 15:08:27 我来说两句 0
我要投稿 [字体:小大] 新建名为NotificationIconCount的Android Project。

首先修改AndroidManifest.xml,加入权限<uses-permission
android:name="android.permission.READ_CONTACTS"></uses-permission>,因为我们要读取联系人。

修改main.xml如下,这里定义一个ImageView,勇于预览我们处理好的加上数字的图标。

Xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:adjustViewBounds="true"/>
</LinearLayout>
先来获取手机内通讯录的图标,如果没有获取到,则使用该应用的图标.
Java代码
super.onCreate(savedInstanceState);
setContentView(yout.main);
mImageView=(ImageView)findViewById(R.id.icon);
//优先采用联系人的图标,如果不存在则采用该应用的图标
Drawable contactIcon;
try {
contactIcon =
getPackageManager().getApplicationIcon("com.android.contacts");
} catch (NameNotFoundException e) {
contactIcon=null;
}
Bitmap icon;
if(contactIcon instanceof BitmapDrawable){
icon=((BitmapDrawable)contactIcon).getBitmap();
}else{
icon=getResIcon(getResources(), R.id.icon);
}
这里用到一个自定义的根据资源图标id获取图片的函数,很简单,代码如下:Java代码
/**
* 根据id获取一个图片
* @param res
* @param resId
* @return
*/
private Bitmap getResIcon(Resources res,int resId){
Drawable icon=res.getDrawable(resId);
if(icon instanceof BitmapDrawable){
BitmapDrawable bd=(BitmapDrawable)icon;
return bd.getBitmap();
}else{
return null;
}
}
获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。

Java代码
/**
* 获取联系人的个数
* @return 手里通讯录中联系人的个数
*/
private int getContactCount(){
Cursor
c=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._COUNT}, null, null, null);
try{
c.moveToFirst();
return c.getInt(0);
}catch(Exception e){
return 0;
}finally{
c.close();
}
}
这里采用Uri的方式获取联系人的cursor,然后获取个数。

有了图标和联系人个数就可以生成带联系人个数的图标了,我们看下生成的这个函数。

Java代码
/**
* 在给定的图片的右上角加上联系人数量。

数量用红色表示
* @param icon 给定的图片
* @return 带联系人数量的图片
*/
private Bitmap generatorContactCountIcon(Bitmap icon){
//初始化画布
int
iconSize=(int)getResources().getDimension(android.R.dimen.app_icon_size) ;
Log.d(TAG, "the icon size is "+iconSize);
Bitmap contactIcon=Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);
Canvas canvas=new Canvas(contactIcon);
//拷贝图片
Paint iconPaint=new Paint();
iconPaint.setDither(true);//防抖动
iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
Rect src=new Rect(0, 0, icon.getWidth(), icon.getHeight());
Rect dst=new Rect(0, 0, iconSize, iconSize);
canvas.drawBitmap(icon, src, dst, iconPaint);
//在图片上创建一个覆盖的联系人个数
int contacyCount=getContactCount();
//启用抗锯齿和使用设备的文本字距
Paint countPaint=new
Paint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
countPaint.setColor(Color.RED);
countPaint.setTextSize(20f);
countPaint.setTypeface(Typeface.DEFAULT_BOLD);
canvas.drawText(String.valueOf(contacyCount), iconSize-18, 25, countPaint);
return contactIcon;
}
注释的很详细,就不解释了,无非就是定义一个画布(Canvas),然后在上面画图标,画数字文本。

然后我们把得到的这个处理过的Bitmap放在我们在main.xml里定义的ImageView 里展示就可以看到效果了.
Java代码
mImageView.setImageBitmap(contactCountIcon);
我们启动应用看看效果.
我们看到了,右上角红色的1代表我手机中有一个联系人作者“TryLoveCatch”。

相关文档
最新文档