个人技术博客—作业向
个人技术博客
0.写在前面
咳咳!首先本人在这个项目中负责的并不是实现图像识别的那一组也是因为原型设计大部分出自我手,所以就被安排去搞Android了。
1.GitHub的一些问题
这里就要提到了,当时的作业让我们使用GitHub的时候就是我直接让室友帮忙弄得,导致后面自己一窍不通。所以现在强行补习一波,也是很烦。最后也是我的电脑可能当初设置的问题,大家都能用https来clone,但是不知为何我的电脑不行,只能用ssh来clone。所以在这里也是花费了很多时间啊。后面也是经常使用GitHub来合并。所以也算是可以正常使用git了。
2.Android的学习
还好在大一的时候我是学过一些java课程的,虽然是自学,但是基本的java语法什么都可以理解,所以学习Android的时候我认为应该是比较顺利的,但是我后来发现了一个问题。那就是时间,我们的时间很有限,这段时间里我们有考试还有实习,而且这是边学边做。所以马上决定先做,遇到不会的再学,所以也更加是让人头大了。哎~!
挑几个来说吧。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</LinearLayout>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</FrameLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</RelativeLayout>
这三个是我最常用到的三个布局,很多时候都是这三个布局的各种嵌套使用能完成很多布局的样式。而且各自有着自己的独特的用法,有时候他们的嵌套使用也会遇到很多问题,而且不同的布局的属性也是各有不同,个人感觉这里面还有很多要学习的东西。
fontcolorlist = new ArrayList<Map<String, Object>>();
fontcoloradapter = new SimpleAdapter(this,getcolorData(),R.layout.fontcoloritem,new String[]{"image","text"},new int[]{R.id.fontimage,R.id.fonttext});
fontcolorView.setAdapter(fontcoloradapter);
private List<Map<String,Object>> getcolorData(){
for(int i=0;i<fontcolor.length;i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("image",fontcolor[i]);
map.put("text",colorname[i]);
fontcolorlist.add(map);
}
return fontcolorlist;
}
这是一个girdview的实现,采用了适配器的来进行填充数据。但是个人感觉并没有完全掌握这个的用法,只能说简单调用。地址
由于GridView是默认的竖直滑动,不符合我们的设想,于是将其改为横向滚动。也是试了很多的方法后,
private void changeGridView() {
// item宽度
int itemWidth = DensityUtil.dip2px(this, 100);
// item之间的间隔
int itemPaddingH = DensityUtil.dip2px(this, 1);
int size = datas.size();
// 计算GridView宽度
int gridviewWidth = size * (itemWidth + itemPaddingH);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
mContentGv.setLayoutParams(params);
mContentGv.setColumnWidth(itemWidth);
mContentGv.setHorizontalSpacing(itemPaddingH);
mContentGv.setStretchMode(GridView.NO_STRETCH);
mContentGv.setNumColumns(size);
}
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
将文字转为Bitmap:
public static Bitmap textAsBitmap(String text, float textSize) {
TextPaint textPaint = new TextPaint();
// textPaint.setARGB(0x31, 0x31, 0x31, 0);
textPaint.setColor(Color.BLACK);
textPaint.setAntiAlias(true);
textPaint.setTextSize(textSize);
StaticLayout layout = new StaticLayout(text, textPaint, 450,
Layout.Alignment.ALIGN_CENTER, 1.5f, 0.0f, true);
Bitmap bitmap = Bitmap.createBitmap(layout.getWidth() + 20,
layout.getHeight() + 20, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.translate(10, 10);
// canvas.drawColor(Color.GRAY);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);//绘制透明色
layout.draw(canvas);
Log.d("textAsBitmap",
String.format("1:%d %d", layout.getWidth(), layout.getHeight()));
return bitmap;
}
数据库用到了郭神介绍的LitePalAndroid数据库框架。感觉使用起来很简单。这里也记录一下其地址:
这里用到的dip2px方法是根据手机的分辨率从 dp 的单位 转成为 px(像素),在布局文件中也是使用HorizontalScrollView来包裹GridView。
点击的三种实现方式:匿名内部类,外部实现类和接口类的区别还是不怎么了解。如果以后有时间认真学习Android的时候可以去了解一下。
好习惯:将使用的一些固定的string或者中文字符放在Strings中,通过调用来达到使用的目的。以及将app开发中常使用颜色存入Color中,在通过调用来使用。
3.遇到的问题
1.不知道是不是我自己的Android studio的问题,有时候会出现R变成红字的现象。不知什么原因,百度也没找到,暂时解决方法是就算R变红你依然去运行程序,一次失败强行运行2次,很多时候发现R又不变红了。很坑!
.....待续