当前位置: 编程技术>移动开发
本页文章导读:
▪SlidingDrawer隐藏式屉子 SlidingDrawer隐藏式抽屉
private String items[] = {"项目1" , "项目2" ,"项目3" ,"项目4" ,"项目5"};
private int icons[] = {R.drawable.img1 , R.drawable.img2 , R.drawable.img3 , R.drawable.img4, R.drawable.img5};
private SlidingDrawe.........
▪ 资料读写 文件读写
Android SDCard操作(文件读写,容量计算) :http://zhuyonghui116.blog.hexun.com/56778119_d.htmlAndroid中读写文件: http://blog.csdn.net/cocodehouse/article/details/5974288增加权限:<uses-permission android:name="a.........
▪ 关于ListView中性能优化中图片加载有关问题 关于ListView中性能优化中图片加载问题
ListView的性能优化网上很多信息,但是涉及到异步加载图片问题就会出现问题。
具体参看上篇文章http://314858770.iteye.com/admin/blogs/1217594
如果每次都重新.........
[1]SlidingDrawer隐藏式屉子
来源: 互联网 发布时间: 2014-02-18
SlidingDrawer隐藏式抽屉
private String items[] = {"项目1" , "项目2" ,"项目3" ,"项目4" ,"项目5"};
private int icons[] = {R.drawable.img1 , R.drawable.img2 , R.drawable.img3 , R.drawable.img4, R.drawable.img5};
private SlidingDrawer slidingDrawer;
private GridView gridView;
private ImageView image;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sling_drawer);
slidingDrawer = (SlidingDrawer)findViewById(R.id.slidingDrawer1);
gridView = (GridView)findViewById(R.id.gridView1);
image = (ImageView)findViewById(R.id.handle);
NewSlidingDrawerDrawerAdapter adapter = new NewSlidingDrawerDrawerAdapter(this, items , icons);
gridView.setAdapter(adapter);
gridView.setNumColumns(3);
slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener(){
public void onDrawerOpened() {
image.setImageResource(R.drawable.close);
}
});
slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener(){
public void onDrawerClosed() {
image.setImageResource(R.drawable.open);
}
});
}
public class NewSlidingDrawerDrawerAdapter extends BaseAdapter {
private Context context;
private String[] items;
private int[] icons;
public NewSlidingDrawerDrawerAdapter(Context context ,String[] items , int[] icons) {
this.context = context;
this.items = items;
this.icons = icons;
}
public int getCount() {
return items.length;
}
public Object getItem(int position) {
return items[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater factory = LayoutInflater.from(context);
/* 使用grid.xml为每几个item的Layout */
View v = (View) factory.inflate(R.layout.gridview_item, null);
/* 取得View */
ImageView iv = (ImageView) v.findViewById(R.id.ItemImage);
TextView tv = (TextView) v.findViewById(R.id.ItemText);
/* 设定显示的Image与文字 */
iv.setImageResource(icons[position]);
tv.setText(items[position]);
return v;
}
}
gridview_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical"> <ImageView android:layout_height="100dip" android:id="@+id/ItemImage" android:layout_width="80dip" android:src="/blog_article/@drawable/img1/index.html" android:layout_gravity="center_horizontal" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/ItemText" android:text="名称" /> </LinearLayout>
sliding_drawer.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <SlidingDrawer android:layout_width="fill_parent" android:id="@+id/slidingDrawer1" android:layout_height="fill_parent" android:handle="@+id/handle" android:content="@+id/content" android:orientation="horizontal"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:src="/blog_article/@drawable/open/index.html" android:layout_height="wrap_content" android:id="@+id/handle"></ImageView> </LinearLayout> <LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView android:layout_width="wrap_content" android:id="@+id/gridView1" android:layout_height="fill_parent"></GridView> </LinearLayout> </SlidingDrawer> </LinearLayout>
[2] 资料读写
来源: 互联网 发布时间: 2014-02-18
文件读写
Android SDCard操作(文件读写,容量计算) :http://zhuyonghui116.blog.hexun.com/56778119_d.html
Android中读写文件: http://blog.csdn.net/cocodehouse/article/details/5974288
增加权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
String sDStateString = android.os.Environment.getExternalStorageState();
// 拥有可读可写权限
if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {
... ...
}
然后用FileInputStream和FileOutputStream进行读写。
Android SDCard操作(文件读写,容量计算) :http://zhuyonghui116.blog.hexun.com/56778119_d.html
Android中读写文件: http://blog.csdn.net/cocodehouse/article/details/5974288
增加权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
String sDStateString = android.os.Environment.getExternalStorageState();
// 拥有可读可写权限
if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {
... ...
}
然后用FileInputStream和FileOutputStream进行读写。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.file.rw"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ReadWriteFilesActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="a.txt" />
<Button
android:id="@+id/button1"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="Load" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button2"
android:layout_width="68dp"
android:layout_height="wrap_content"
android:text="Save" />
</LinearLayout>package com.file.rw;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ReadWriteFilesActivity extends Activity {
/** Called when the activity is first created. */
private Button button1,button2;
private EditText editText1,editText2;
private TextView textview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);
textview =(TextView)findViewById(R.id.textview);
//load file from sd card
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
textview.setText("Load............");
String sdStatus = android.os.Environment.getExternalStorageState();
if(sdStatus.equalsIgnoreCase(android.os.Environment.MEDIA_MOUNTED)){
textview.setText(editText1.getText());
File rootDir = android.os.Environment.getExternalStorageDirectory();
File readFile = new File(rootDir.getAbsolutePath()+File.separator+editText1.getText());
if(!readFile.exists()){
textview.setText(editText1.getText()+"不存在.");
}else{
try {
FileInputStream in = new FileInputStream(readFile);
byte[] buffer = new byte[in.available()];
in.read(buffer);
in.close();
editText2.setText(new String(buffer));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}//end of android.os.Environment.MEDIA_MOUNTED
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(editText1.getText()==null||editText1.getText().toString().trim().length()==0){
textview.setText("第一个输入框没有输入文件名.");
return;
}
if(editText2.getText()==null||editText2.getText().toString().trim().length()==0){
textview.setText("第而个输入框没有输入文件内容.");
return;
}
String sdStatus = android.os.Environment.getExternalStorageState();
if(android.os.Environment.MEDIA_MOUNTED.equalsIgnoreCase(sdStatus)){
File root = android.os.Environment.getExternalStorageDirectory();
File newFile = new File(root.getAbsolutePath()+File.separator+editText1.getText());
try {
if(!newFile.exists()){
newFile.createNewFile();
}
FileOutputStream out = new FileOutputStream(newFile);
out.write(editText2.getText().toString().getBytes());
out.close();
textview.setText("写文件成功.");
} catch (Exception e) {
// TODO: handle exception
}
}
}
});
}
}
[3] 关于ListView中性能优化中图片加载有关问题
来源: 互联网 发布时间: 2014-02-18
关于ListView中性能优化中图片加载问题
ListView的性能优化网上很多信息,但是涉及到异步加载图片问题就会出现问题。
具体参看上篇文章http://314858770.iteye.com/admin/blogs/1217594
如果每次都重新inflate一个新的View出来肯定会造成性能损失严重,可能会出现listview滚动是很卡的情况,还会出现内存溢出。
现在想出一个方法就是每次都添加一个标识,然后设置图片的时候检查这个标识,如果不相符则忽略此次。
适配器中的关键代码
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.listview_item, null);
viewHolder.imageView = (ImageView)convertView.findViewById(R.id.imageView);
viewHolder.textView = (TextView)convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
}
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.textView.setText(stringList.get(0)[0]);
final ImageView imageView = viewHolder.imageView;
imageView.setImageDrawable(null); //reset default
imageView.setTag(position);
asyncImageLoader.loadDrawable(stringList.get(0)[1], new AsyncImageLoader.ImageCallback() {
@Override
public void imageLoaded(Drawable imageDrawable, String imageUrl,int key) {
if((Integer)imageView.getTag() != key) return; //不是当前显示的View,则忽略此次
if(imageDrawable != null){
imageView.setImageDrawable(imageDrawable);
}
}
},position);
return convertView;
}
static class ViewHolder{
TextView textView;
ImageView imageView;
}
异步加载图片的代码
public Drawable loadDrawable(final String imageUrl,
final ImageCallback callback,final int key) {
if (!URLUtil.isValidUrl(/blog_article/imageUrl/index.html)) {
callback.imageLoaded(null, imageUrl,key);
return null;
}
if (imageCache.containsKey(imageUrl)) {
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
if (softReference.get() != null) {
Log.d(AsyncImageLoader.class.getName(),
"imageCache has this image,use cache. the url:"
+ imageUrl);
callback.imageLoaded(softReference.get(), imageUrl,key);
return softReference.get();
}
}
//更多代码
}
public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable, String imageUrl,int key);
}
经过此次修改,再测试时不会出现之前的内存持续增长 和 滚动很卡的情况。
最新技术文章: