Android 学习笔记之 个人认为最简单的查看Android源码方案
【简介】感谢网友“硕鼠”参与投稿,以下是小编整理的Android 学习笔记之 个人认为最简单的查看Android源码方案(共4篇),欢迎阅读分享,希望对您有所帮助。
篇1:Android 学习笔记之 个人认为最简单的查看Android源码方案
相信很多人都会疑惑如何使用Eclipse ADT查看源码?
下面我们将介绍 如何查看Android源码,
Android 学习笔记之 个人认为最简单的查看Android源码方案
,
本文有如下优点:
1.不用费心去找Android源码地址:一个字烦,网上的东西杂七杂八的。。。
2.不用担心过程难,这个就三步。。
工具:ADT
第一步:找到你ADT根目录,打开SDK Manager.exe
篇2:Android学习笔记之Theme主题的修改设置
(1)布局文件
(2)在values中新建xml文件
<?xml version=“1.0” encoding=“utf-8”?>
(3)如果要修改Android默认的主题需要在清单文件中修改,下图圈出的位置就是需要修改的地方
(4)其他问阿金都可以默认无需修改!
篇3:Android学习笔记之:对Android图像色调饱和度亮度处
首先也简单介绍下图像的RGBA模型,R指红色(Red),G指绿色(Green),B指蓝色(Blue)及A指透明度(Alpha),由这四种元素搭配组合成了各种各样的颜色,
处理工具类及方法:
public class ImageTools {
/**
* 对图片进行处理
* @description:
* @date -8-12 下午8:45:05
*/
public static Bitmap getColorImage(Bitmap bitmap, float sx, float bhd, float ld) {// 参数分别是色相,饱和度和亮度
Bitmap bmp = bitmap.createBitmap(bitmap.getWidth, bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
ColorMatrix sxMatrix = new ColorMatrix();// 设置色调
sxMatrix.setRotate(0, sx);
sxMatrix.setRotate(1, sx);
sxMatrix.setRotate(2, sx);
ColorMatrix bhdMatrix = new ColorMatrix();// 设置饱和度
bhdMatrix.setSaturation(bhd);
ColorMatrix ldMatrix = new ColorMatrix();// 设置亮度
ldMatrix.setScale(ld, ld, ld, 1);
ColorMatrix mixMatrix = new ColorMatrix();// 设置整体效果
mixMatrix.postConcat(sxMatrix);
mixMatrix.postConcat(bhdMatrix);
mixMatrix.postConcat(ldMatrix);
paint.setColorFilter(new ColorMatrixColorFilter(mixMatrix));// 用颜色过滤器过滤
canvas.drawBitmap(bmp, 0, 0, paint);// 重新画图
return bmp;
}
}
在Activity中选择要处理的ImageView及对应的Bitmap,调用工具类中方法即可:
private ImageView colorIv;
private SeekBar sxBar, bhdBar, ldBar;
private static int MIN_COLOR = 100;
private static int MAX_COLOR = 255;
private float sx, bhd, ld;
private Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.color_main);
initViews();
}
private void initViews() {
bmp=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
colorIv = (ImageView) findViewById(R.id.color_iv);
colorIv.setImageBitmap(bmp);
sxBar = (SeekBar) findViewById(R.id.sx_seekbar);
bhdBar = (SeekBar) findViewById(R.id.bhd_seekbar);
ldBar = (SeekBar) findViewById(R.id.ld_seekbar);
sxBar.setOnSeekBarChangeListener(this);
sxBar.setMax(MAX_COLOR);// 设置最大值
sxBar.setProgress(MIN_COLOR);// 设置初始值(当前值)
bhdBar.setOnSeekBarChangeListener(this);
bhdBar.setMax(MAX_COLOR);
bhdBar.setProgress(MIN_COLOR);
ldBar.setOnSeekBarChangeListener(this);
ldBar.setMax(MAX_COLOR);
ldBar.setProgress(MIN_COLOR);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
switch (seekBar.getId()) {
case R.id.sx_seekbar:
sx = (progress - MIN_COLOR) * 1.0f / MIN_COLOR * 180;
break;
case R.id.bhd_seekbar:
bhd = progress * 1.0f / MIN_COLOR;
break;
case R.id.ld_seekbar:
ld = progress * 1.0f / MIN_COLOR;
break;
}
colorIv.setImageBitmap(ImageTools.getColorImage(bmp, sx, bhd, ld));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
xml布局文件:
xmlns:tools=schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent >
android:id=@+id/color_iv
android:layout_width=300dp
android:layout_height=300dp
android:layout_centerHorizontal=true
android:layout_marginBottom=15dp
android:layout_marginTop=15dp />
android:id=@+id/sx_seekbar
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_below=@id/color_iv
/>
android:id=@+id/bhd_seekbar
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_below=@id/sx_seekbar
android:layout_marginTop=10dp />
android:id=@+id/ld_seekbar
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_below=@id/bhd_seekbar
android:layout_marginTop=10dp />
篇4:Android异步加载学习笔记之四:利用缓存优化网络加载
如果不做任何处理,直接用网络加载图片在网速快的情况下可能没什么不好的感觉,但是如果使用移动流量或是网络不好的时候,问题就来了,要么用户会抱怨流量使用太多,要么抱怨图片加载太慢,如论从哪个角度出发,都不是好的体验!要提高用户体验,我们就要使用缓存,今天学习是是Lru缓存。
Lru(Least Recently Used)近期最少使用算法,即是在一定条件下LRU缓存是把最近最少使用的数据移除,让给最新读取的数据。而往往最常读取的,也是读取次数最多的,所以,利用LRU缓存,我们能够提高应用的效率及用户体验度。Andorid本身提供了LruCache类来实现这个缓存算法 。
在ImageLoader中利用LruCache缓存:
public class ImageLoader {
private LruCache
private ImageView mImageView;
private ListView listView;
private Set
@SuppressLint(NewApi)
public ImageLoader(ListView listView) {
this.listView = listView;
mTask = new HashSet
int maxMemory = (int) Runtime.getRuntime().maxMemory();// 获取最大可用内存
int cacheSize = maxMemory / 8;// 设置缓存数据的最大占用内存量为最大值1/8
mCaches = new LruCache
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();// 每次存入缓存的时候调用,返回bitmap的大小
}
};
}
@SuppressLint(NewApi)
/**
* 增加缓存数据,增加前判断数据是否存在
* @description:
* @author ldm
* @date 2015-8-11 下午7:51:04
*/
public void setLruCaches(String url, Bitmap bitmap) {
if (getLruCaches(url) == null) {// 如果缓存中不存在url对应的Bitmap,则把bitmap加入mCaches
mCaches.put(url, bitmap);
}
}
/**
* 从缓存中获取数据
* @description:
* @author ldm
* @date 2015-8-11 下午7:51:22
*/
@SuppressLint(NewApi)
public Bitmap getLruCaches(String url) {
return mCaches.get(url);// 通过url获取缓存中对应的bitmap
}
/**
*从url中获取到Bitmap
* @description:
* @author ldm
* @date 2015-8-11 下午1:55:12
*/
public Bitmap getBitmapByUrl(String urlStr) {
Bitmap bitmap = null;
InputStream is = null;
try {
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
is = new BufferedInputStream(con.getInputStream());
bitmap = BitmapFactory.decodeStream(is);
con.disconnect();
return bitmap;
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
is.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
public void loadImgByAsyncTask(ImageView img, String url) {
mImageView = img;
// 从缓存中取出图片
Bitmap bitmap = getLruCaches(url);
if (bitmap == null) {// 如果能在中无图片,则就从网络下载
mImageView.setImageResource(R.drawable.ic_launcher);//设置默认图片
new ImageAsyncTask(url).execute(url);
}
else {// 缓存中有图片,则直接显示出来
mImageView.setImageBitmap(bitmap);
}
}
private class ImageAsyncTask extends AsyncTask
private ImageView imageView;
private String mUrl;
public ImageAsyncTask(String mUrl) {
this.mUrl = mUrl;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = getBitmapByUrl(params[0]);// 获取图片
if (bitmap != null) {
setLruCaches(params[0], bitmap);
}
return getBitmapByUrl(params[0]);
}
@Override
protected void onPostExecute(Bitmap result) {
ImageView img = (ImageView) listView.findViewWithTag(mUrl);
if (img != null && result != null) {
imageView.setImageBitmap(result);
}
mTask.remove(this);
}
}
public void setImageView(int start, int end) {
for (int i = start; i < end; i++) {
String url = DataAdapter.URLS[i];
Bitmap bitmap = getLruCaches(url);
if (bitmap == null) {// 如果能在中无图片,则就从网络下载
ImageAsyncTask task = new ImageAsyncTask(url);
task.execute(url);
mTask.add(task);
}
else {// 缓存中有图片,则直接显示出来
ImageView img = (ImageView) listView.findViewWithTag(url);
img.setImageBitmap(bitmap);
}
}
}
public void stopAllTask(){
if(mTask.size()>0){
for (ImageAsyncTask task : mTask) {
task.cancel(false);
}
}
}
}
对应ListView的数据适配器DataAdapter:
public class DataAdapter extends BaseAdapter implements OnScrollListener {
private Context mContext;
private List
private ImageLoader mImageLoader;
private int mSart;
private int mEnd;
public static String[] URLS;
private ListView listView;
private boolean isFirst;//是否是第一次进入
public DataAdapter(Context mContext, List
this.listView = listView;
this.mContext = mContext;
this.list = list;
mImageLoader = new ImageLoader(listView);
URLS = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
URLS[i] = list.get(i).getImgUrl();
}
isFirst=true;
listView.setOnScrollListener(this);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View view, ViewGroup arg2) {
ViewHolder holder = null;
if (view == null) {
holder = new ViewHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.item_layout, null);
holder.iv = (ImageView) view.findViewById(R.id.item_iv);
holder.titleTv = (TextView) view.findViewById(R.id.item_title);
holder.contentTv = (TextView) view.findViewById(R.id.item_content);
view.setTag(holder);
}
else {
holder = (ViewHolder) view.getTag();
}
holder.titleTv.setText(list.get(arg0).getTitle());
holder.contentTv.setText(list.get(arg0).getContent());
holder.iv.setTag(list.get(arg0).getImgUrl());// 为ImageView设置tag
// new ImageLoader().loaderImageThread(holder.iv, list.get(arg0).getImgUrl());//用线程加载图片
mImageLoader.loadImgByAsyncTask(holder.iv, list.get(arg0).getImgUrl());
return view;
}
/***
* ListView在流动过程中调用
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mSart = firstVisibleItem;// 可见第一个item
mEnd = firstVisibleItem + visibleItemCount;// 可见的最后一个item
if(isFirst&&visibleItemCount>0){//第一次加载数据时数据处理
mImageLoader.setImageView(mSart, mEnd);
isFirst=false;
}
}
/***
* ListView在流动状态变化时调用
*/
@Overridewww.2cto.com
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE) {// 流动停止,此时加载可见项数据
mImageLoader.setImageView(mSart, mEnd);
}
else {// 停止加载数据
mImageLoader.stopAllTask();
}
}
class ViewHolder {
TextView titleTv;
TextView contentTv;
ImageView iv;
}
}