在android Activity中实现图片的拖动(20页).doc
-在android Activity中实现图片的拖动-第 20 页在android Activity中实现图片的拖动1. 图片在Activity中的固定区域上下移动使用到ImageView,和TranslateAnimation控制位置变化的动画类进行操作。2. 第一步是在xml文件中添加图片控件ImageView并且引用资源文件中的相应图片。第二步在正文文件中设置ImageView类型的变量imageview,并且用findViewById()将变量imageview与xml中的ImageView相关联,在正文文件中设置imageview 将它与监听器绑定运用TranslateAnimation translationAnimation = new TranslateAnimation(ENDSTART_X-20, ENDSTART_X-20, endY+10, endY+10); /图片转移 imageview.startAnimation(translationAnimation);开始动画置3. TranslateAnimation(float from XDelta,float toXDelta,float fromYDelta,float toYDelta)(位置变化动画)4. 获取屏幕长宽:WindowManager windowManager = getWindowManager();Display display = windowManager.getDefaultDisplay();screenWidth = display.getWidth();screenHeight = display.getHeight();5. FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。原来可以利用android:layout_gravity来设置位置的:2011/12/36. 在android屏幕中实现Button在固定区域拖动:只要将用户的handleActionUp, handleActionDown handleActionmove,中的处理过程前面加上一个条件判断,看是否用户点击的屏幕上坐标是否在所规定的范围内,若在则执行下面的处理工作否则不执行。Apk包的安装与卸载方法1:首先安装一:首先需要启动模拟器二:start -> 运行 ->CMD三:进入andoridsdk下面的tools目录四:adb install c:*.apk(说明:“c:*.apk”是要安装的文件的路径)这样就安装成功了!卸载一:首先需要启动模拟器二:start -> 运行 ->CMD三:进入andoridsdk下面的tools目录四:adb shell(按回车跳一行 出现# 在#后空一格 输入cd data 按回车 下面方法一样)五:cd data六:cd app七:ls(说明,主要是针对不知道包下面的文件,可以列表显示出来)八:rm *.apk(说明:"*.apk"是你要卸载的apk包)这样就可以卸载这个apk包了!在DOS中查看模拟器中创建的数据库信息首先进入Dos 进入android sdk tools 目录下 输入Adb shell出现#输入 cd data输入 cd datals l用cd 包名 进入着自己所创建的包再 ls出现 databases 与 lib输入 cd databasesLs 出现 数据库名 例如 long_db继而输入 sqlite3 long_db输入 .schema查看表结构Select * from 表名;2011年12月3日星期六关于在闹钟设置中屏幕上同时显示多个Button的操作总结:1. 实现用户在灰色区域内点击,即弹出一个显示点击处对应的时间button,并且当用户多次点击灰色区域继而弹出多个button(每次点击灰色区域就在点击处弹出),对于弹出的button都能够被用户拖动,并且被拖动的button不会影响其他的button,即button之间具有一定的独立性。而且它们之间又有共同点。共同点在于这些button都是从同一个ButtonActivity类中继承过来的。2. Button 是继承textView的对象。只是在textview的基础上增添了一个风格 style属性3. ButtonActivity类是用户自定义的一个类,这个类是继承库函数中的Button方法的,而ButtonActivity中的具体内容则是创建一个button的监听器实现方法,当在主函数中实例化一个ButtonActivity对象后就在其后紧跟着就要设置监听器,监听器的设置则是调用ButtonActivity实例化对象中的一个监听器实现方法,这个方法就是用户先前在ButtonActivity中定义的监听器实现方法。代码如下:主函数中的代码:imageview = new ImageView(this); bt = new ButtonActivity(this); /实例化一个button对象bt.ButtonListener(bt,imageview);/调用用户自定义的button里的监听器方法用户自定义ButtonActivity中的方法package com.djhs;import android.content.Context;import android.util.DisplayMetrics;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.AbsoluteLayout;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.AbsoluteLayout.LayoutParams;public class ButtonActivity extends Button implements OnTouchListener private final String LOG = "MainViewInformation"/ private Button bt ;/ private ImageView imageview=null;private LinearLayout main_layout;private FrameLayout frame_layout;private int startY;private int endX;private int endY; int lastX,lastY; int width =0; /屏幕的宽度public ButtonActivity(Context context) super(context);/ TODO Auto-generated constructor stubOverridepublic boolean onTouch(View v, MotionEvent event) / TODO Auto-generated method stubreturn false; public void ButtonListener(ButtonActivity v,final ImageView w) /用户自定义的监听器方法DisplayMetrics dm=getResources().getDisplayMetrics(); /get the screen width and height final int screenWidth=dm.widthPixels; final int screenHeight=dm.heightPixels; Log.i(LOG, "screenWidth-" + screenWidth); Log.i(LOG, "screenHeight-" + screenHeight); final int Width = screenWidth; width = Width; final double hour = screenHeight/24.0; /将屏幕高度转化成时间 final double minute = hour/60.0; v.setOnTouchListener(new OnTouchListener() /the button actionlistener;public boolean onTouch(View v, MotionEvent event) / TODO Auto-generated method stubint ea=event.getAction(); Log.i("TAG", "Touch:"+ea); switch(ea) case MotionEvent.ACTION_DOWN: lastX=(int)event.getRawX();/获取触摸事件触摸位置的原始X坐标 lastY=(int)event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx=(int)event.getRawX()-lastX; int dy=(int)event.getRawY()-lastY; int l=v.getLeft();/+dx; /fixed the x coordinate int b=v.getBottom()+dy; int r=v.getRight();/+dx; /fixed the y coordinate int t=v.getTop()+dy; /下面判断移动是否超出屏幕 if(l<0) l=0; r=l+v.getWidth(); if(t<-25) t=0; b=t+v.getHeight(); if(r>screenWidth) r=screenWidth; l=r-v.getWidth(); if(b>screenHeight+25) b=(int) screenHeight; t=b-v.getHeight(); v.layout(l, t, r, b); /show the buuton on the screen LayoutParams layout_para = null; layout_para = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, (int) (screenWidth*(6/10.0), (int) t); lastX=(int)event.getRawX(); lastY=(int)event.getRawY(); v.setLayoutParams(layout_para); if(dy>0) /button向下滑动时 final int hours = (int) (t+(screenWidth*(3/28.0)/hour); final int min = (int) (t+(screenWidth*(3/28.0)%hour)/minute); if(min<10) if(t+(screenWidth*(3/28.0)<screenWidth ) /判断是否已超出屏幕高度 (TextView) v).setText("时钟"+hours+":"+0+min); /分钟小于10前面显示加0 设置button上的内容 else (TextView) v).setText("时钟"+0+":"+0+0); else (TextView) v).setText("时钟"+hours+":"+min); else /button向上滑动时 final int hours = (int) (t+screenWidth*(1/28.0)/hour); final int min = (int) (t+screenWidth*(1/28.0)%hour)/minute); if(min<10) if(t>0 ) /判断是否已超出屏幕高度 (TextView) v).setText("时钟"+hours+":"+0+min); /分钟小于10前面显示加0 else (TextView) v).setText("时钟"+0+":"+0+0); else (TextView) v).setText("时钟"+hours+":"+min); if(dy>0) /button向下滑动时箭头位置向下看齐 layout_para = new AbsoluteLayout.LayoutParams(int) (screenWidth*(1/13.0), (int) (screenWidth*(1/13.0),(int) (int) (width*(6/10.0)-width*(1/12.0), (int) (t+screenWidth*(1/14.0); w.setLayoutParams(layout_para); else /button向上滑动时箭头位置向上看齐 layout_para = new AbsoluteLayout.LayoutParams(int) (screenWidth*(1/13.0), (int) (screenWidth*(1/13.0),(int) (int) (width*(6/10.0)-width*(1/12.0), (int) t); w.setLayoutParams(layout_para); w.setImageResource(R.drawable.path); v.postInvalidate(); break; case MotionEvent.ACTION_UP: break; return false; 2011年12月6日星期二此说明为解释如何在android 手机屏幕上显示gif格式的图片在Android 中是不支持直接使用Gif 图片关联播放帧动画必须将gif格式的图片用软件将其拆分为多个图片通过AnimationDrawable进行逐帧连续播放1.实现此功能的程序在picture文件中;anim.xml内容如下:<?xml version="1.0" encoding="UTF-8"?><animation-list android:oneshot="false"xmlns:android="<item android:duration="150" android:drawable="drawable/xiu0" /><item android:duration="150" android:drawable="drawable/xiu1" /><item android:duration="150" android:drawable="drawable/yte" /><item android:duration="150" android:drawable="drawable/yte" /><item android:duration="150" android:drawable="drawable/yte" /></animation-list> 4.main.xml中的进行相应的修改即可内容如下: <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ProgressBar android:id="+id/prograssbar01" style="style/animStyle" android:layout_width="fill_parent" android:layout_height="fill_parent"</LinearLayout>5. 在valuse文件中新建一个style.xml文件将其内容复制到对应的文件下即可。<?xml version="1.0" encoding="utf-8"?><resources> <style name="animStyle" parent = "android:style/Widget.ProgressBar.Large"> <item name ="android:indeterminateDrawable">anim/anim</item> </style></resources>android 平台sd卡进行文件的读写:1. 首先介绍大概步骤 首先是在用户自建的android工程(工程名如 Filewriteread)中修改Filewriteread/AndroidManifest.xml中的内容修改后的结果如下:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=" package="com.dd.aa" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-sdk android:minSdkVersion="8" /> <application android:icon="drawable/ic_launcher" android:label="string/app_name" > <activity android:label="string/app_name" android:name=".FilewriteandreadActivity" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>2.在如下目录中创建Filewriteread/FilewritereadActivity.java文件内容如下:package com.dd.aa;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class FilewriteandreadActivity extends Activity private TextView readFileTextView; private Button back = null; private FileHelper helper; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.filewriteread); readFileTextView = (TextView) findViewById(R.id.readFileTextView); back = (Button)findViewById(R.id.button01); back.setOnClickListener(new backListener(); helper = new FileHelper(getApplicationContext(); readFileTextView.setText("读取文件:" + helper.readSDFile("test.txt"); class backListener implements OnClickListenerOverridepublic void onClick(View arg0) / TODO Auto-generated method stubfinish();对应此java文件的filewriteread.xml文件如下:<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" android:fadingEdge="vertical" <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:orientation="vertical" > <TextView android:id="+id/readFileTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#000000" android:text="false" /> <RelativeLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:orientation="vertical" <Button android:id="+id/button01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="string/back" </Button></RelativeLayout></LinearLayout></ScrollView>FileHelper.java中的内容如下:package com.dd.aa;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import android.content.Context;import android.os.Environment;public class FileHelper private Context context; /* SD卡是否存在*/ private boolean hasSD = false; /* SD卡的路径*/ private String SDPATH; /* 当前程序包的路径*/ private String FILESPATH; public FileHelper(Context context) this.context = context; hasSD = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); SDPATH = Environment.getExternalStorageDirectory().getPath(); FILESPATH = this.context.getFilesDir().getPath(); * 读取SD卡中文本文件 * param fileName * return public String readSDFile(String fileName) StringBuffer sb = new StringBuffer(); File file = new File(SDPATH + "/" + fileName); try FileInputStream fis = new FileInputStream(file); int c; while (c = fis.read() != -1) sb.append(char) c); fis.close(); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); return sb.toString(); public String getFILESPATH() return FILESPATH; public String getSDPATH() return SDPATH; public boolean hasSD() return hasSD; 此程序是实现在/data/data/工程包名/files/下面进行创建文件的的读写操作:具体步骤如下1. 例如创建一个android 工程 名为 shiyan 对应的的Activity名 例如 ShiyanActivity.java内容如下:import java.io.FileOutputStream;import org.apache.http.util.EncodingUtils;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class ShiyanActivity extends