两天的学习成果整理。。。之后还会添加并整理

2015-5-2
在百度申请了开发者的Key,用于学习百度地图Android的开发。
以下是在控制台获取我的Sha1秘钥的结果:
密钥库类型: JKS
密钥库提供方: SUN


您的密钥库包含 1 个条目


别名: androiddebugkey
创建日期: 2015-4-26
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: 14c91dce
有效期开始日期: Sun Apr 26 16:09:58 CST 2015, 截止日期: Tue Apr 18 16:09:58 CST
2045
证书指纹:
         MD5: FF:E2:AC:4D:2B:43:0E:86:88:ED:0F:6B:92:34:73:AF
         SHA1: 06:CB:08:D3:00:51:A7:02:AA:16:3E:FA:9F:78:8F:C3:72:B8:A5:2B
         SHA256: 99:95:B6:B3:B8:CD:43:45:D6:09:E8:E2:F0:D9:78:7B:F9:F7:FD:55:C3:E8:56:73:90:86:90:69:F9:0D:1F:4C
         签名算法名称: SHA256withRSA
         版本: 3


扩展:


#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D8 4B 27 A4 09 F9 70 88   4A B2 A4 4E C3 44 92 70  .K'...p.J..N.D.p
0010: FE 81 0C 10                                        ....
]
]


//


下面来回忆一下,今天学习Android开发的一些要点:


窗口分 Activity 和 Fragment 两种形式,Activity比较常用,但是有点老套笨重,Fragment则是比较轻便的方式。
可是我没有听懂Fragment的方式,找时间复习一下


Activity的启动,切换,依赖于Intent,Intent就是个Android的信使,用来在窗口等东西之间传递信息。


StartActivity(new Intent(CurrentActivity.this,WantActivity.class));


可以使用Intent.putExtra的方式来放入额外的信息,很多数据要使用Bundle
Bundle bundle=new Bundle;


Bundle是个绑定元素,里面可以承载很多的数据,甚至是数组集合。


Context是对资源的访问方式,Activity的class的this可以用来给Context赋值,以便让其访问全局数据。


Service是个很重要的工具,好似Windows下的服务系统,是没有界面的后台服务进程


在应用退出后,非绑定的Service也不会退出,而绑定到进程上面的Service会报错并退出。


如果让子线程修改主UI线程的UI数据,需要使用回调并Handler的方式。  Handler多用于发送信息


Handler.handlerSendMessage();


用户自己定义的信息,可以用What来获取赋值


Message msg=new Message;
msg.what=Data;
Handler.sendMessage(msg)<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">;</span>


大约这个意思。。。


BoardcastReceiver是广播接收器,Android很多重要的信息通过广播来传送,比如电话和短信,可以使用这个东西
来制作短信窃听器,或者屏蔽垃圾短信。。。


广播分有序和无序两种,有序可以被截断,无序不行。有序的发送顺序是通过订阅信息的应用的设置权限等级来决定的。


权限先做一个简要的了解,后面会有大课。
<uses-permission android:name="android.permission.INTERNET"/>是权限的申请方式,在manifest中添加


而权限的检查通过 
int checkResult =context.checkCallingOrSelfPermission("android.permission.INTERNET");
if (checkResult==PackageManager.PERMISSION_GRANTED){
	/
}


来实现,返回值有PERMISSION_GRANTED和PERMISSION_DENIED两种。




应用中加入对手势的判断是通过重写GestureDetector来实现的,
final GestureDetector gestureDetector=new GestureDetector(FirstShow.this,new GestureDetector.OnGestureListener() {
            @Override
            public boolean onDown(MotionEvent e) {
				//按下事件
                return false;
            }


            @Override
            public void onShowPress(MotionEvent e) {
				//按下一会事件
            }


            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                
				return false;
            }


            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                //按下并移动
                return false;
            }


            @Override
            public void onLongPress(MotionEvent e) {
				//长时间按下
            }


            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                //滑动(一般通过这个来判断左拖右拖)
                return true;
            }
        });
		
		但是想要使用GestureDetector,需要重写
		findViewById(R.id.XXX).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                gestureDetector.onTouchEvent(event);
                findViewById(R.id.XXX).onTouchEvent(event);//加上这个保证我们监听的控件可以正常的收到消息
                return true;
            }
        });






实现控件动画有两种方式,一种是通过系统自带的控件动画Animation来实现


RotateAnimation rotateAnimation=new RotateAnimation(开始角度,旋转角度,(可选常量)坐标以谁为准,
旋转中心X坐标(如果为0.5f则为百分比形式),
(可选常量)坐标以谁为准,旋转中心Y坐标(如果为0.5f则为百分比形式));//旋转动画
AlphaAnimation alphaAnimation=new AlphaAnimation(0,1);//透明动画   (0到1 即为从无到有)
ScaleAnimation scaleAnimation=new ScaleAnimation();//缩放动画,参数在看吧


从网上找到了一些资料:
 AlphaAnimation(透明度动画)


    AlphaAnimation有两个构造函数,分别是:


    —— AlphaAnimation(Context context, AttributeSet attrs):第二个参数是个属性集,之后会详细对AttributeSet 讲解


    ——AlphaAnimation(float fromAlpha, float toAlpha):第一个参数是初始透明度,第二个参数是终止透明度


    TranslateAnimation(平移动画)


    TranslateAnimation有三个构造函数,分别是:


    ——TranslateAnimation(Context context, AttributeSet attrs):略过


    ——TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta):分别对应x轴的起始、终点坐标,与y轴的起始、终点坐标


    ——TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue):

第一个参数是x轴方向的值的参照(Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF,or Animation.RELATIVE_TO_PARENT);

第二个参数是第一个参数类型的起始值;第三个参数与第四个参数是x轴方向的

终点参照与对应值;后面四个参数就不用解释了。如果全部选择Animation.ABSOLUTE,其实就是第二个构造函数。


以x轴为例介绍参照与对应值的关系


    如果选择参照为Animation.ABSOLUTE,那么对应的值应该是具体的坐标值,比如100到300,指绝对的屏幕像素单位


    如果选择参照为Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT指的是相对于自身或父控件,


    对应值应该理解为相对于自身或者父控件的几倍或百分之多少。一定要多试试这几个参数类型!


       ScaleAnimation(缩放动画)


       ScaleAnimation(缩放动画)有四个构造函数,分别是:


       ——ScaleAnimation(Context context, AttributeSet attrs):略过


       ——ScaleAnimation(float fromX, float toX, float fromY, float toY):同TranslateAnimation(float fromXDelta, float toXDelta,float fromYDelta, float toYDelta)


       ——ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY):这里解释后面两个参数,pivot


         英文意思为“枢轴”,也就是支点。通过这两个参数可以控制缩放动画的放大方向,这个点不会随对象大小变化而变化


      ——ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue):
如果理解了前面所讲的,这个就不做多的说明,如果不清楚,请回头多用代码试试。


        RotateAnimation(旋转动画)


         RotateAnimation(旋转动画)同样有四个构造函数,分别是:


        ——RotateAnimation(Context context, AttributeSet attrs)


      ——RotateAnimation(float fromDegrees, float toDegrees)


      ——RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)


      ——RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)






 








 给应用添加ViewPager(引导页)的方式,创建ViewPager ,并创建一个PageAdapter来容纳它。
 
 通过这个类来创建ViewPager:
 
public class Guide extends Activity implements OnPageChangeListener {


	private ViewPager vp;
	private ViewPagerAdapter vpAdapter;//这个类是自定义的继承自PageAdapter的类
	private List<View> views;//一个View元素的集合
	private ImageView[] dots;//图片下面的标示点
	private int[] ids = { R.id.iv1, R.id.iv2, R.id.iv3 };//标示点的资源(句柄)
	private Button start_btn;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.guide);
		initViews();
		initDots();
	}


	private void initViews() {					//初始化图片集的方法
		LayoutInflater inflater = LayoutInflater.from(this);


		views = new ArrayList<View>();
		views.add(inflater.inflate(R.layout.one, null));			//向View集合中加入Layout元素
		views.add(inflater.inflate(R.layout.two, null));
		views.add(inflater.inflate(R.layout.three, null));


		vpAdapter = new ViewPagerAdapter(views, this);
		vp = (ViewPager) findViewById(R.id.viewpager);
		vp.setAdapter(vpAdapter);
		start_btn = (Button) views.get(2).findViewById(R.id.start_btn);
		start_btn.setOnClickListener(new OnClickListener() {			//重写一个按钮按下监听器,用来进入主界面


			@Override
			public void onClick(View arg0) {
				Intent i = new Intent(Guide.this, MainActivity.class);
				startActivity(i);
				finish();
			}
		});


		vp.setOnPageChangeListener(this);
	}


	private void initDots() {  //初始化点图片
		dots = new ImageView[views.size()];
		for (int i = 0; i < views.size(); i++) {
			dots[i] = (ImageView) findViewById(ids[i]);
		}
	}


	@Override
	public void onPageScrollStateChanged(int arg0) {
		
			//为了使用ViewPager类重写的函数
	}


	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		
			//为了使用ViewPager类重写的函数
	}


	@Override
	public void onPageSelected(int arg0) {	//在左右滑动的时候标示图片下面的小点
		for (int i = 0; i < ids.length; i++) {
			if (arg0 == i) {
				dots[i].setImageResource(R.drawable.login_point_selected);
			} else {
				dots[i].setImageResource(R.drawable.login_point);
			}
		}
	}


}




此外,还需要另创建一个继承自PagerAdapter的类,来容纳ViewPager:


public class ViewPagerAdapter extends PagerAdapter {


	private List<View> views;   //View的集合
	private Context context;    //Context的对象


	public ViewPagerAdapter(List<View> views, Context context) {    //类的构造函数


		this.views = views;											//赋值为传入的参数
		this.context = context;
	}


	@Override
	public void destroyItem(View container, int position, Object object) {		//销毁资源


		((ViewPager) container).removeView(views.get(position));
	}


	@Override
	public Object instantiateItem(View container, int position) {			


		((ViewPager) container).addView(views.get(position));			//重写的元素实例化的方法


		return views.get(position);							//返回元素的位置


	}


	@Override
	public int getCount() {
		return views.size();				//获得元素的个数
	}


	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return (arg0 == arg1);					//是否是同一个
	}


}






然后在欢迎页面进行一下的判断和设置:


public class WelcomeAct extends Activity {   //继承自Activity的欢迎页面
	
	private boolean isFirstIn = false;					//是否是第一次进入
	private static final int TIME = 2000;				//消息发送的延时时间,也是停留在欢迎画面的时间
	private static final int GO_HOME = 1000;			//自定义的消息值
	private static final int GO_GUIDE = 1001;
	
	
	private Handler mHandler = new Handler(){
		public void handleMessage(android.os.Message msg) {				//重写Handler的handleMessage方法,
			switch (msg.what) {											//对自定义值进行判断
			case GO_HOME:
				goHome();
				break;


			case GO_GUIDE:
				 goGuide();
				break;
			}
			
		};
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.welcome);
		init();						
	}
			
	private void init(){														//初始化函数
		SharedPreferences perPreferences = getSharedPreferences("jike", MODE_PRIVATE);		//这是要向共享库保存的值,后面会学到
		isFirstIn = perPreferences.getBoolean("isFirstIn", true);					//获得值
		if (!isFirstIn) {
			mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);						//延时发送信息
		}else{
			mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
			Editor editor = perPreferences.edit();									//头一次进入,那么设值
			editor.putBoolean("isFirstIn", false);
			editor.commit();														//提交
		}
		
	}
	
	private void goHome(){															//进入主界面方法
		Intent i = new Intent(WelcomeAct.this,MainActivity.class);
		startActivity(i);
		finish();
	}
	private void goGuide(){															//进入引导页面的方法
		Intent i = new Intent(WelcomeAct.this,Guide.class);
		startActivity(i);
		finish();
	}
	
}








接下来在屏幕边缘的拉出菜单遇到了点问题,android.support.v4这个包我竟然没有。。。
然后从傻逼CSDN下载了一个,加到工程里面却出现了一些问题。。。


在考虑吧。。。


OK,解决了,原来运行起来根本就是好的,但是程序警告了,我也懒得管了。。。


下面总结一下DrawerLayout的用法


首先在你想要添加DrawerLayout的xml文件中,用
<android.support.v4.widget.DrawerLayout>


</android.support.v4.widget.DrawerLayout>
包围整个XML文件,给赋予命名空间,(xmlns:android="http://schemas.android.com/apk/res/android")
最终效果是这样:


<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Draw_Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<LinearLayout>

//主界面的一些东西

</LinearLayout>
//ListView与LinearLayout或者RelativeLayout是并列的
<ListView                                           //但是一定要ListView在下面
        android:id="@+id/List_View"
        android:layout_width="240dp" //这个不要超过360dp,给用户留下一点空间,可以看到后面的东西
        android:layout_height="match_parent"
        android:layout_gravity="start" //这个值必须要指定,start是从左侧拖拽出菜单
        android:background="#ffd0e5ff" //而不推荐使用left,right
        android:choiceMode="singleChoice" //单选
        android:divider="@android:color/transparent" //背景透明
        android:dividerHeight="0dp"> //项间距为0


    </ListView>
</android.support.v4.widget.DrawerLayout>

这样,就在布局文件中添加了一个DrawerLayout

接下来,在主窗口的代码文件中,向DrawerLayout中添加元素


	private DrawerLayout drawerLayout;
    private ListView listView;
    private ArrayList<String> menuList;
    private ArrayAdapter<String> arrayAdapter;



然后在主窗口的OnCreate函数中添加以下代码:


drawerLayout= (DrawerLayout) findViewById(R.id.Draw_Layout);
    listView= (ListView) findViewById(R.id.List_View);
    menuList = new ArrayList<String>();
    for (int ai = 0; ai < 6; ai++) {
        menuList.add("Item" + ai);
    }
    arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,menuList);
    listView.setAdapter(arrayAdapter);



这样,就添加了6个元素,不过还没有响应单击事件,这个留到下次学习补上。















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值