0%

最近Android开发一直使用Android studio,整体还是很好用的,用起来比Eclipse顺手。但是使用过程中也遇到了很多问题特别是将Eclipse的项目导入到Android studio中遇到了很多问题,虽然Eclipse也支持gradle导出然后使用Android studio导入,但是用起来感觉不是很灵活。今天自己研究了一下gradle构建Android项目,实现了手动在项目里添加gradle文件轻松实现Android studio的导入。

关于gradle的相关资料我这里就不详细介绍了,网上有很多的资料(主要是我也不太懂),这里我就介绍一下具体的实现方法。

阅读全文 »

在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。
Gson解析json的方法我这里就不详细说明了,网上一大把的例子,我这里主要说一下使用@SerializedName进行注解的情况。
使用Gson解析json成对象时默认的是将json里对应字段的值解析到java对象里对应字段的属性里面。然后我们经常会遇到我们自己定义的java对象里的属性名跟json里的字段名是不一样的,这种情况怎么办呢,这时我们就可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。

阅读全文 »

相信大家在开发中经常会用到按钮随点击状态改变背景、改变文字颜色的需求,TextView随点击状态改变文字颜色我们一般的做法是在res目录下新建color文件夹,然后在color文件下创建资源文件如下:

1
2
3
4
5
6
res/color/tv_color.xml
<!--?xml version="1.0" encoding="utf-8"?-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#123456"/>
<item android:state_pressed="false" android:color="#ff0000"/>
</selector>

在布局中使用:

1
2
3
4
5
6
<TextView 
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text"
android:textColor="@color/text_color"/>
阅读全文 »

&nbsp;&nbsp;&nbsp;&nbsp;android本身没有提供监听应用程序从前台切换到后台的api,所以我们只能自己想办法来实现。我想到的办法是写一个BaseActivity在onStop里判断当前系统前台运行的应用程序是否是我们自己的应用程序来实现监听应用程序被切换到后台。然后我们的应用所有Activity都继承BaseActivity。下面我们来看具体实现代码:

阅读全文 »

最近在研究pdf阅读的时候遇到了解析出图片出现翻转的情况于是研究了下,发现可以使用matrix实现图片的翻转。

不多说先直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if(drawable != null){
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
Matrix matrix = new Matrix();

//缩放 当sy为-1时向上翻转 当sx为-1时向左翻转 sx、sy都为-1时相当于旋转180°
matrix.postScale(1, -1);

//因为向上翻转了所以y要向下平移一个bitmap的高度
matrix.postTranslate(0 ,bitmap.getHeight());

canvas.drawBitmap(bitmap, matrix, null);
}
}

上面是继承ImageView重写了onDraw方法,主要是通过matrix的postScale实现,postScale为缩放,当sy为-1时向上翻转 当sx为-1时向左翻转, sx、sy都为-1时相当于旋转180°。如下图所示:

scale

阅读全文 »

今天改别人的一个bug时遇见一个问题,发现某个界面点击返回以后特别慢,得等一会儿才能返回到上一个界面。

当时第一反应可能是在点击返回的时候或者是在Activity的onDestroy里面做了很多耗时的操作导致点击返回的时候出现特别慢的问题,但是仔细查看了一下代码发现在返回按钮的监听或者是设备返回键的监听都没有做什么操作,onDestroy里同样没做什么操作,这就奇怪了问题到底出在哪里呢?

经过一番查找调试分析,觉得问题可能不是出在当前界面,将视线转到要返回的上一个界面,发现重写了onResume方法,可能是这个方法执行了耗时的操作导致的,打印了一下这个方法的耗时时间发现耗时也不是很高啊还不到10ms,难道问题的关键不是在这里?

阅读全文 »

相信大家在Android应用开发的时候经常会遇到需要使用圆形图片的时候,如果是我们程序中的图片还好说可以让我们的美工MM直接给我们做一个圆形的图片就搞定了。可是如果是从服务器上获取的或者是用户上传的呢我们该怎么办呢,比如用户的头像等。接下来我们就来看看在Android中怎样显示一个圆形的图片。

第一种方法:直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static Bitmap getRoundBitmap(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
//获得圆的直径
int d = Math.min(width, height);

Bitmap output = Bitmap.createBitmap(width,height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);

//这里颜色随便填只要保证是不透明的就行也就是前两位是ff
int color = 0xff424242;
Paint paint = new Paint();
paint.setColor(color);
//设置抗锯齿
paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0);
//先绘制一个圆
canvas.drawCircle(width/2, height/2, d/2, paint);

//设置两张图片相交的模式
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(bitmap, 0, 0, paint);

return output;
}

主要代码就是通过canvas画一个圆,圆的直径就是图片的宽高最小的那一边,然后设置图片相交的模式,再将bitmap画上去取两张图片相交的部分就得到我们想要的圆了。最关键的代码就是 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN))这一句,设置两张图片的叠加模式,具体有哪些模式呢,用一张图来表示:

阅读全文 »