当前位置:  编程技术>移动开发
本页文章导读:
    ▪一个不错的起动菜单显示屏动画效果        一个不错的启动菜单显示屏动画效果 看到一个老外做的不错的android启动菜单的动画效果,小结下。1 首先在drawable目录下放一些动画要用的图片。2 splash.xml:  <?xml version="1.0" encoding="utf-8".........
    ▪ intent调用代码小结        intent调用代码总结   转载:http://www.android123.com.cn/androidkaifa/612.html   显示Web网页:   1. Uri uri = Uri.parse("http://www.android123.com.cn");  2. Intent it = new Intent(Intent.ACTION_VIEW,uri);  3. startActivity(it);   显.........
    ▪ 经典最小生成树prim与kruskal算法分析-比较-小结       经典最小生成树prim与kruskal算法分析-比较-总结 例题 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。 约翰已经.........

[1]一个不错的起动菜单显示屏动画效果
    来源: 互联网  发布时间: 2014-02-18
一个不错的启动菜单显示屏动画效果
看到一个老外做的不错的android启动菜单的动画效果,小结下。

1 首先在drawable目录下放一些动画要用的图片。

2 splash.xml:
  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/TheSplashLayout"
  android:layout_gravity="center"
  >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/SplashImageView"
android:layout_gravity="center"
>
</ImageView>
3 点启动窗口动画效果后显示的main.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"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>

3 SplashScreen.java
  这里是欢迎启动类的核心部分
  public class SplashScreen extends Activity {

    /**
     * The thread to process splash screen events
     */
    private Thread mSplashThread;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Splash screen view
    setContentView(R.layout.splash);
   
        // Start animating the image
    final ImageView splashImageView = (ImageView) findViewById(R.id.SplashImageView);
    splashImageView.setBackgroundResource(R.drawable.flag);
    final AnimationDrawable frameAnimation = (AnimationDrawable)splashImageView.getBackground();
    splashImageView.post(new Runnable(){

public void run() {
frameAnimation.start();
}    
    });
       
   
    final SplashScreen sPlashScreen = this;  
   
    // The thread to wait for splash screen events
    mSplashThread =  new Thread(){
    @Override
    public void run(){
    try {
    synchronized(this){
    // Wait given period of time or exit on touch
    wait(5000);
    }
    }
    catch(InterruptedException ex){   
    }

    finish();
   
    // Run next activity
    Intent intent = new Intent();
    intent.setClass(sPlashScreen, MainActivity.class);
    startActivity(intent);
    stop();    
    }
    };
   
    mSplashThread.start();
   
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
return false;
}
 
    /**
     * Processes splash screen touch events
     */
    @Override
    public boolean onTouchEvent(MotionEvent evt)
    {
    if(evt.getAction() == MotionEvent.ACTION_DOWN)
    {
    synchronized(mSplashThread){
    mSplashThread.notifyAll();
    }
    }
    return true;
    }
4 为了更好看,在values 目录下添加样式文件
  styles.xml:
<resources>
<style name="Animations" parent="@android:Animation" />
<style name="Animations.SplashScreen">
        <item name="android:windowEnterAnimation">@anim/appear</item>
        <item name="android:windowExitAnimation">@anim/disappear</item>
    </style>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowAnimationStyle">@style/Animations.SplashScreen</item>
</style>
</resources>
注意下这里<style name="Animations" parent="@android:Animation" />
<style name="Animations.SplashScreen">
        <item name="android:windowEnterAnimation">@anim/appear</item>
        <item name="android:windowExitAnimation">@anim/disappear</item>
    </style>
定义了当进入和退出时的动画效果是什么。具体的再
在anim目录下分别有显示和消失的两个效果的XML具体定义:
appear.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="800"
/>
</set>
disppear.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="800"
/>
</set>
这里其实就是透明度的设置而已:
然后在manifest.xml中,设置好使用的样式:
<activity
android:name="SplashScreen"
android:theme="@style/Theme.Transparent"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
即可。

5 另外要注意的是,设置动画效果这段:
   splashImageView.setBackgroundResource(R.drawable.flag);
    final AnimationDrawable frameAnimation = (AnimationDrawable)splashImageView.getBackground();
    splashImageView.post(new Runnable(){

public void run() {
frameAnimation.start();
}    
    });
由于动画效果的设置不能在oncreate中直接设置,而是要从GUI线程中创建的,因此
使用imageview类的POST方法,当GUI创建时就显示这个动画

详细代码可以从附件下载

1 楼 epal 2011-09-27  
感谢楼主分享,学习一下
2 楼 xiaohexing374 2011-11-02  
分享是一种美德,回贴也是一种美德

    
[2] intent调用代码小结
    来源: 互联网  发布时间: 2014-02-18
intent调用代码总结

 

转载:http://www.android123.com.cn/androidkaifa/612.html

 

显示Web网页:

  1. Uri uri = Uri.parse("http://www.android123.com.cn");
  2. Intent it = new Intent(Intent.ACTION_VIEW,uri);
  3. startActivity(it);

 

显示Google地图:

  1. Uri uri = Uri.parse("geo:38.899533,-77.036476");
  2. Intent it = new Intent(Intent.Action_VIEW,uri);
  3. startActivity(it);

 

Maps路径规划:

  1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
  2. Intent it = new Intent(Intent.ACTION_VIEW,URI);
  3. startActivity(it);

 

拨打电话:

  1. Uri uri = Uri.parse("tel:xxxxxx");
  2. Intent it = new Intent(Intent.ACTION_DIAL, uri);  
  3. startActivity(it);  

  1. Uri uri = Uri.parse("tel.xxxxxx");
  2. Intent it =new Intent(Intent.ACTION_CALL,uri);

注意需要权限 <uses-permission id="android.permission.CALL_PHONE" />

 

发送SMS/MMS

  1. Intent it = new Intent(Intent.ACTION_VIEW);
  2. it.putExtra("sms_body", "android开发网欢迎您");
  3. it.setType("vnd.android-dir/mms-sms");
  4. startActivity(it);  

 

发送短信

  1. Uri uri = Uri.parse("smsto:10086");
  2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
  3. it.putExtra("sms_body", "10086"); //正文为10086
  4. startActivity(it);  

 

发送彩信

  1. Uri uri = Uri.parse("content://media/external/images/media/10"); //该Uri根据实际情况修改,external代表外部存储即sdcard
  2. Intent it = new Intent(Intent.ACTION_SEND);
  3. it.putExtra("sms_body", "android123.com.cn");
  4. it.putExtra(Intent.EXTRA_STREAM, uri);
  5. it.setType("image/png");
  6. startActivity(it);

 

发送Email

  2. Uri uri = Uri.parse("mailto:android123@163.com");
  3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
  4. startActivity(it);

  1. Intent it = new Intent(Intent.ACTION_SEND);
  2. it.putExtra(Intent.EXTRA_EMAIL, "android123@163.com");
  3. it.putExtra(Intent.EXTRA_TEXT, "android开发网测试");
  4. it.setType("text/plain");
  5. startActivity(Intent.createChooser(it, "选择一个Email客户端"));  

  1. Intent it=new Intent(Intent.ACTION_SEND);  
  2. String[] tos={"android123@163.com"};     //发送到
  3. String[] ccs={"ophone123@163.com"};    //抄送
  4. it.putExtra(Intent.EXTRA_EMAIL, tos);  
  5. it.putExtra(Intent.EXTRA_CC, ccs);  
  6. it.putExtra(Intent.EXTRA_TEXT, "正文");  
  7. it.putExtra(Intent.EXTRA_SUBJECT, "标题");  
  8. it.setType("message/rfc822");    //编码类型
  9. startActivity(Intent.createChooser(it, "选择一个Email客户端"));

 

Email添加附件

  1. Intent it = new Intent(Intent.ACTION_SEND);
  2. it.putExtra(Intent.EXTRA_SUBJECT, "正文");
  3. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/nobody.mp3"); //附件为sd卡上的nobody MP3文件
  4. sendIntent.setType("audio/mp3");
  5. startActivity(Intent.createChooser(it, "选择一个Email客户端"));

 

播放多媒体

  1.  
  2. Intent it = new Intent(Intent.ACTION_VIEW);
  3. Uri uri = Uri.parse("file:///sdcard/nobody.mp3");
  4. it.setDataAndType(uri, "audio/mp3");
  5. startActivity(it);

  1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); //从系统内部的MediaProvider索引中调用播放
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
  3. startActivity(it);  

 

Uninstall卸载程序

  1. Uri uri = Uri.fromParts("package", packageName, null); //packageName为包名,比如com.android123.apkInstaller
  2. Intent it = new Intent(Intent.ACTION_DELETE, uri);
  3. startActivity(it);

 

 

进入联系人界面

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent);

 查看某个联系人,当然这里是ACTION_VIEW,如果为选择并返回action改为ACTION_PICK,当然处理intent时返回需要用到startActivityforResult

 Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, ID);//最后的ID参数为联系人Provider中的数据库BaseID,即哪一行
 Intent intent = new Intent();
 intent.setAction(Intent.ACTION_VIEW);
 intent.setData(personUri);
startActivity(intent);

 选择一个图片

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("image/*");
startActivityForResult(intent, 0);

 调用Android设备的照相机,并设置拍照后存放位置

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath()+"/cwj", android123 + ".jpg"))); //存放位置为sdcard卡上cwj文件夹,文件名为android123.jpg格式
startActivityForResult(intent, 0);

 搜索指定package name在market上,比如搜索com.android123.cwj的写法如下

Uri uri = Uri.parse("market://search?q=pname:com.android123.cwj");  
Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(intent);    


    
[3] 经典最小生成树prim与kruskal算法分析-比较-小结
    来源: 互联网  发布时间: 2014-02-18
经典最小生成树prim与kruskal算法分析-比较-总结

例题

农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。

约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。

为了用最小的消费,他想铺设最短的光纤去连接所有的农场。

你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。

输入格式 Input Format

输入格式经常会以两中形式

(1)采用邻接矩阵存储   

第一行为农场的个数,N(3<=N<=100)。

接下去为一个N*N的矩阵,表示每个农场之间的距离。(农场之间的距离小于999,0路线表示无法直接到达)。

(2)图采用边目录方式存储。

第一行N为农场的个数,M为农场与农场之间共有M条可以搭设光纤路线。

接下去的M行为中每行有3个数A,B,C。分别表示农场A到农场B的距离为C。

输出格式 Output Format

输出连接所有农场并所用光纤最短的方案。 (输出之后要求换行)

样例输入 Sample Input

 

(1)采用邻接矩阵存储。                                 (2)采用边目录方式存储。     

6                                                                     6     7
0 3 0 0 0 2                                                      1     2     3
3 0 5 0 2 0                                                      2     3     5
0 5 0 1 0 0                                                       3     4     1
0 0 1 0 4 0                                                       4     5     4
0 2 0 4 0 1                                                       2     5     2
2 0 0 0 1 0                                                       6     5     1
                                                                          1     6     2
                                                          

样例输出 Sample Output

(1)采用邻接矩阵存储                                  (2)采用边目录方式存储。

10                                                                  10

 

 

 

 

 

(1)我的prim的代码采用邻接矩阵存储

prim适合采用邻接矩阵存储代码如下

var n,i,j,w,k,t,w1,m,min,p:longint;
ch:char;
lowcost,coset:array[1..100]of longint;
bo:array[1..100]of boolean;
map:array[1..100,1..100]of longint;          {邻接矩阵图}
begin
    while not eof do
    begin
        readln(n);
        if n=0 then break;
        for i:=1 to n do
          for j:=1 to n do                            //初始化
          begin
              read(map[i,j]);
              if (i=j)or(map[i,j]=0)then
                 map[i,j]:=maxlongint;                 //把不相连的点之间设为无穷大
          end;
        for i:=1 to n do
        begin
            lowcost[i]:=map[1,i];
            coset[i]:=1;
            bo[i]:=false;
            {初始化lowcost集合(即每个点到集合的最短距离)与bo数组和
            coset(设这个点为A)到集合内于他连接的且最短距离的另一个点(这个点为b)
            那么coset就是记录与点A的父亲节点B(B一定要具备上述条件)}
        end;
        bo[1]:=true;
        m:=0;
        for i:=1 to n-1 do
        begin
            min:=maxlongint;
            for j:=1 to n do
              if (bo[j]=false)and(lowcost[j]<min)then        //选择与集合距离最短的点
              begin
                  min:=lowcost[j];p:=j;
              end;
              writeln('(',coset[p],',',p,')'); //输出上一步得到的与集合距离啊短距离的点的父亲节点和该点(即集合新选择的最短路径);
              m:=m+min;            //把上一步得到的点到集合的距离不断累加
              bo[p]:=true;           //把以加入的集合的点设为true,防止重判.
              for j:=1 to n do
                if (bo[j]=false)and(map[p,j]<lowcost[j])then     //重判集合到那一些还每被选入集合的点的距离
                begin
                    lowcost[j]:=map[p,j];      //重判集合到那一些还每被选入集合的点的距离
                    coset[j]:=p;               //刷新父亲节点
                end;
        end;
        writeln(m);
    end;
end.

 

  

 

(2)我的kruskal的代码采用边目录方式存储

 

 

 

 

kruskal适合采用边目录方式存储。

(kruskal的一般版本);

在这里说明一下感染和完全感染的区别以便于理解下面的代码的注释

[感染指一条边中只有一个点被感染了要么是起点,要么是始点,一边中的两点中只有一点被感染称为感染]

[完全感染染指一边中两点都被感染了,只有两点同时都被感染了才称为完全感染。如果该边的两点被完全感染那么这条边也就被完全感染(即false),而没有被完全感染的边或感染的边都为(true)]

解析的不好不要BS我水平有限

type edge=record
   x,y,c:longint;
   end;
var n,m,i,j,mincost,min,p:longint;
d:array[1..100] of boolean;
e:array[1..100]of boolean;
elist:array[1..100] of edge;   
begin
    while not eof do
    begin
        read(n,m);
        for i:=1 to m do read(elist[i].x,elist[i].y,elist[i].c);
        fillchar(d,sizeof(d),true);                                         //读入数据加初始化
        fillchar(e,sizeof(e),true);
        m:=0;
        for j:=1 to n-1 do
        begin
            min:=maxlongint;   
            for i:=1 to m do
              if e[i]=true then                   
               if ((d[elist[i].x]=true) xor (d[elist[i].y]=true)) or (j=1) then //选择感染了的边这样可以完全避开够成环情况(但第一条边需要开绿灯)
                if (elist[i].c)<min then      //对被感染了的边进行判断选择其边的值最小的
                begin                          
                    min:=elist[i].c;p:=i;     //记录该边的值,以及该边的起点和始点
                end;                                                            
                d[elist[p].x]:=false; d[elist[p].y]:=false;   //把该边完全感染(即起点和始点都被感染)
                writeln('(',elist[p].x,',',elist[p].y,')');         //输出新的被完全感染的边的起点和始点(既路径)
                e[p]:=false;                     //因为起点和始点都被感染所以该边也应被完全感染                      
                m:=m+min;   //累加被完全感染的边的值
        end;
    writeln(m);
    end;
end.

 

 

(改进后的kruskal+快排的高效率版本);

type edge=record
   x,y,c:longint;
   end;
var n,m,i,j,mincost:longint;
d:array[1..100] of boolean;
e:array[1..100of boolean;
elist:array[1..100] of edge;
procedure qsort(ss,tt:longint);
var i,j,x:longint;
temp:edge;
begin
    i:=ss;j:=tt;x:=elist[(i+j)div 2].c;
    while i<=j do
    begin
        while elist[i].c<x do inc(i);
        while elist[j].c>x do dec(j);
        if i<=j then
        begin
            temp:=elist[i];
            elist[i]:=elist[j];
            elist[j]:=temp;
            inc(i);
            dec(j);
        end;
    end;
    if ss<j then qsort(ss,j);
    if i<tt then qsort(i,tt);
end;
begin
    while not eof do
    begin
        read(n,m);
        for i:=1 to m do read(elist[i].x,elist[i].y,elist[i].c);
        qsort(1,m);
        fillchar(d,sizeof(d),true);
        fillchar(e,sizeof(e),true);
        mincost:=0;
        for j:=1 to n-1 do
        begin
            for i:=1 to m do
              if e[i]=true then
               if ((d[elist[i].x]=true) xor (d[elist[i].y]=true)) or (j=1) then
               begin
                   d[elist[i].x]:=false; d[elist[i].y]:=false;      {高效体现在这里,和上面的那个代码比较省去了判断
                   writeln('(',elist[i].x,',',elist[i].y,')');              而表面上看感觉不出如何省时,里面切暗藏玄机。
                   e[i]:=false;                                               省时在于每次选择被感染的边都是一次到位决不含糊}
                   mincost:=mincost+elist[i].c;                      //下面进行prim,kruskal算法比较会进一步说明
                   break;
               end;
        end;
    writeln('tree: ','length=',mincost);
    end;
end.

 

                                 个人对prim算法与kruskal算法比较和总结

1 )Prim and Kruskal 算法的空间比较

     数据给的情况不同空间有所不同

    当点少边多的时候如1000个点500000条边这样BT的数据用prim做就要开一个1000*1000的二维数组

而用kruskal做只须开一个500000的数组,恐怖吧500000跟1000*1000比较相差一半。

   当点多边少的时候如1000000个点2000条边像这中BT数据就是为卡内存而存在的,如果用prim做你想开一个1000000*1000000的二维数组没门内存绝对爆挂你。而像这种情况用kruskal只须开一个2000的数组绝对赚到了。

2 )Prim and Kruskal and   Kruskal+快排 算法的时间比较

    prim 在跟普通的kruskal比较空间是肯定没有普通的kruskal来的好。但时间方面的话prim就比普通kruskal来的更恐怖一些,用prim时间比普通的kruskal快20倍。在这时我就想如那数据变态的很用普通的kruskal绝对超时,用prim绝对1爆的内存那就掺了。这时惟有改进prim算法从中砍内存,怎么砍,换一个超大内存的电脑,你去那找啊。拿刀砍,开玩笑。方法一放弃。方法二在改进kruskal算法从中砍时间,经过反复的折腾最后(在老师的指导下)想到了普通的kruskal在选择感染了的边的时候还要进行搜索其所有被感染了的边中值最小的边,每一次都要在此处进行重复的搜索觉的很费时,索性事先派好序。所以改进后变为kruskal+快排,结果时间跟prim相差无几,而且有省内存。这就是王道啊。。。(回头一看啊哇靠写了好长啊,各位来访的大虾小虾,大牛小牛写的不好不要BS我哦,累了休息一下ZZZZ)


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3