文章目录

  • 1. ListView 的 使用
  • 2. RecyclerView 的 使用 (推荐)
  • 3. 动画
    • 3.1 逐帧动画
    • 3.2 补间动画
    • 3.2.1 补间动画 之 alpha透明度
    • 3.2.2 补间动画 之 rotate旋转
    • 3.2.3 补间动画 之 scale(缩放)
    • 3.2.3 补间动画 之 translate(平移)
    • 3.3 属性动画
  • 4. 单位 和 尺寸
  • 5. ViewPager 的使用
  • 6. Mvvm 项目架构
  • 7. Fragment 的 基本使用 和 介绍
    • 7.1 Fragment的 产生
    • 7.2 什么是Fragment?
    • 7.3 Fragment的 使用方法

1. ListView 的 使用


示例使用:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:orientation="vertical"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

MainActivity

package com.example.mydesssc;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private List<Bean> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 往data中添加100条数据for (int i = 0; i < 100; i++) {Bean bean = new Bean();bean.setName("学生" + i);data.add(bean);}ListView listView = findViewById(R.id.lv);// 通过adapter来配置ListView中的内容listView.setAdapter(new MyAdapter(data,this));// 可以设置item的点击监听事件listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Log.e("TAG","setOnItemClickListener被调用");}});}}

list_item.xml:每一个list的元素布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv"android:textSize="30dp"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

Bean:存放数据的实体类。

package com.example.mydesssc;public class Bean {String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

MyAdapter:配置listview的adapter。

  • 创建listview的一个自定义adapter只需要继承BaseAdapter就可以。
package com.example.mydesssc;import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class MyAdapter extends BaseAdapter {private List<Bean> data;private Context context;public MyAdapter(List<Bean> data, Context context) {this.data = data;this.context = context;}// 设置列表长度@Overridepublic int getCount() {// 有多少数据,其实就是长度return data.size();}@Overridepublic Object getItem(int i) {return null;}@Overridepublic long getItemId(int i) {return i;}// getView方法用来设置每一列的视图。@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// 创建该类和对象的原因就是为了节省findViewById调用的时间,只需要调用一次存到类中即可。ViewHolder viewHolder;// 只需要赋值一次就可以了if (convertView == null){viewHolder = new ViewHolder();// 将list_item布局赋值给convertViewconvertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);viewHolder.textView = convertView.findViewById(R.id.tv);// 设置到convertView视图的tag中convertView.setTag(viewHolder);} else {// 从tag中获取viewHolder = (ViewHolder)convertView.getTag();}// 设置TextView的文本,从data中获取。viewHolder.textView.setText(data.get(position).getName());Log.e("TAG","经过getView方法");// 最后直接返回该视图就可以了。return convertView;}// 可以设置一个类专门存放控件private final class ViewHolder{TextView textView;}}

效果如下:

2. RecyclerView 的 使用 (推荐)


RecyclerView比ListView更加灵活,可以设置很多样式。

  • 例如:线性布局、网格布局、交错网格布局(瀑布流)等。

添加RecyclerView的依赖包:

// 添加RecyclerView的依赖包
implementation 'androidx.recyclerview:recyclerview:1.1.0'


示例代码:

activity_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="match_parent"android:layout_height="match_parent"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

recyclerview_item.xml:RecyclerView对象中的item。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv"android:textSize="30dp"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

Bean:

package com.example.demo01;public class Bean {String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

**MainActivity: **

  • 注意与adapter的相互操作。
package com.example.demo01;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {public static final String TAG = "TAG";private List<Bean> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创造1000个假数据for (int i = 9000; i < 11000; i++) {if (i % 4 != 0){continue;}Bean bean = new Bean();bean.setName(TAG + i);data.add(bean);}// 获取RecyclerView对象RecyclerView recyclerview = findViewById(R.id.rv);// 设置RecyclerView的线性布局 , LinearLayoutManager英文直译是线性布局管理器。// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);// recyclerview.setLayoutManager(linearLayoutManager);// 设置RecyclerView的网格布局 , GridLayoutManager英文直译是网格布局管理器。// GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);// recyclerview.setLayoutManager(gridLayoutManager);// 设置RecyclerView的交错网格布局(也就是瀑布流方式)StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);recyclerview.setLayoutManager(staggeredGridLayoutManager);// 设置adapterMyAdapter myAdapter = new MyAdapter(data, this);recyclerview.setAdapter(myAdapter);// RecyclerView本身并没有点击事件。// 但是可以在myAdapter中自定义一个点击事件,并且通过匿名对象来设置监听内容。myAdapter.setRecyclerItemClickListener(new MyAdapter.OnRecyclerItemClickListener() {@Overridepublic void onRecyclerItemCLick(int position) {Log.e("TAG","onRecyclerItemCLick事件被调用。position:" + position);}});}
}

MyAdapter:适配器配置很重要!!

package com.example.demo01;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;/*** 此处继承RecyclerView的RecyclerView.Adapter,并且还需要配置Holder类泛型,其实就是为了要走holder这种形式。* 并且泛型要求必须继承RecyclerView.ViewHolder*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private List<Bean> data;private Context context;public MyAdapter(List<Bean> data, Context context) {this.data = data;this.context = context;}// onCreateViewHolder方法作用:只需要创建RecyclerView的item视图@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {// 通过View.inflate方法获取到context(也就是传入的this),进而创建出recyclerview_item布局视图对象。View view = View.inflate(context,R.layout.recyclerview_item,null);// 这样返回一个MyViewHolder对象,并传入view对象即可。return new MyViewHolder(view);}// onBindViewHolder方法作用:绑定数据。@Overridepublic void onBindViewHolder(@NonNull MyViewHolder holder, int position) {// holder就是上面创建的holder对象,position就是索引。// 这样就可以在这里设置数据了。holder.tv.setText(data.get(position).getName());}// 获取RecyclerView的item个数(也就是总共多少个)。@Overridepublic int getItemCount() {// 为空要设置为0return data == null ? 0 : data.size();}// 上面泛型要求必须继承RecyclerView.ViewHolderpublic class MyViewHolder extends RecyclerView.ViewHolder{private TextView tv;public MyViewHolder(@NonNull View itemView) {super(itemView);// 上面函数构造传入的view对象,在这就可以获取操作了。tv = itemView.findViewById(R.id.tv);// 给itemView布局添加点击事件itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mOnItemClickListener != null){// getAdapterPosition()方法:获取position,可以理解为index索引。mOnItemClickListener.onRecyclerItemCLick(getAdapterPosition());}}});}}// 以下用于映射到点击事件上面,这样外面使用MyAdapter对象的时候,只需要通过匿名对象形式创建赋值mOnItemClickListener,并且自定义事件内容即可。private OnRecyclerItemClickListener mOnItemClickListener;public void setRecyclerItemClickListener(OnRecyclerItemClickListener listener){mOnItemClickListener = listener;}public interface OnRecyclerItemClickListener{void onRecyclerItemCLick(int position);}}

3. 动画


动画类型:逐帧动画(也叫帧动画)、补间动画、属性动画。

3.1 逐帧动画


帧动画的效果就是图片不断的切换,形成的一个动画效果。

animation-list是作为drawable存在的。因此创建的文件必须在drawable下。

drawable的animation-list的定义:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/frame"><!-- 将animation-list中的图片设置为背景图片。 -->
</RelativeLayout>

帧动画的启动和停止:

3.2 补间动画


补间动画的属性如下:

3.2.1 补间动画 之 alpha透明度


alpha的透明度动画配置:

  • 创建一个anim目录,在该目录下面创建一个alpha.xml。

alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><alphaandroid:fromAlpha="0"android:toAlpha="1"android:duration="2000"/><!-- 从fromAlpha到toAlpha,意思就是从透明变成不透明。所消耗的时间是duration也就是2秒中。 --></set>

activity_main.xml:

  • 给imageView图片实现一个从透明显示出来的一个效果。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:adjustViewBounds="true"android:maxWidth="300dp"android:maxHeight="300dp"android:src="@drawable/logo"/></RelativeLayout>

MainActivity:

  • 配置动画相关。
package com.example.demo01;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {public static final String TAG = "TAG";private List<Bean> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView imageView = findViewById(R.id.iv);imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 相当于根据alpha.xml动画设置文件创建了一个Animation对象Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);// 对imageView开始动画imageView.startAnimation(animation);}});}
}

3.2.2 补间动画 之 rotate旋转


与上面相同的一顿操作。只不过配置变成了rotate。

3.2.3 补间动画 之 scale(缩放)


与上面相同的一顿操作。只不过配置变成了scale。

3.2.3 补间动画 之 translate(平移)


3.3 属性动画


属性动画主要依从几个方法。

ValueAnimator方法:针对属性值进行操作。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 针对valueAnimator属性值操作ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);valueAnimator.setDuration(2000);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {float animatedValue = (float) valueAnimator.getAnimatedValue();Log.e("itholmes","animatedValue:" + animatedValue);}});
}

ObjectAnimator方法使用:针对某个object对象(控件对象)操作的动画属性操作。

ImageView imageView = findViewById(R.id.iv);
// 修改imageView的动画的alpha属性
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1f);
objectAnimator.setDuration(4000);
objectAnimator.start();// 监听方式一:通过Animator.AnimatorListener方式必须都要实现方法。代码有点冗余。
objectAnimator.addListener(new Animator.AnimatorListener() {// 动画开始的时候调用@Overridepublic void onAnimationStart(Animator animator) {}// 动画结束的时候调用@Overridepublic void onAnimationEnd(Animator animator) {}// 动画被取消的时候调用@Overridepublic void onAnimationCancel(Animator animator) {}// 动画重复执行的时候调用@Overridepublic void onAnimationRepeat(Animator animator) {}
});// 监听方式二:通过AnimatorListenerAdapter对象的适配方式来调用也是可以的。而且更加更加方便,只需要重写固定方法即可。
objectAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);}
});

注意:不仅仅有ofFloat还有ofInt等等的。

4. 单位 和 尺寸


px 与 pt的区别:

  • px:pixels(像素)。
  • pt:point 一个标准的长度单位,1pt = 1/72 英寸 ,用于印刷业,非常简单易用。

dp 与 sp的作用:

  • dp:就是dip,device independent pixels(设备独立像素)。不同设备有不同的显示效果,就是在不同的手机上面的显示效果
  • sp:scaled pixels(放大像素),主要用于字体大小设置。显示best for textsize。

LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。

// 创建一个LinearLayout对象
LinearLayout linearLayout = new LinearLayout(this);
// 设置一个宽高效果
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 500);
// 方式一:进而给linearLayout对象设置上。
// linearLayout.setLayoutParams(layoutParams);
// 方式二:通过setContentView方法设置主体内容和params的参数。
setContentView(linearLayout,layoutParams);TextView textView = new TextView(this);
textView.setText("我是文本");
textView.setBackgroundColor(0xffff00);
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(300, 300);// 方式一:
// textView.setLayoutParams(textParams);
// linearLayout.addView(textView);// 方式二:
// 可以通过addView方法给textView赋予textParams的参数
linearLayout.addView(textView,textParams);

5. ViewPager 的使用


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.viewpager.widget.ViewPagerandroid:id="@+id/vp"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

三个layout的页面:

layout1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:orientation="vertical"><TextViewandroid:text="layout1"android:textSize="30sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

layout2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:background="#ff00ff00"android:orientation="vertical"><TextViewandroid:text="layout2"android:textSize="30sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

layout3.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:background="#ffffff00"android:orientation="vertical"><TextViewandroid:text="layout3"android:textSize="30sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

MyAdapter

  • 定义适配器。
package com.example.mynotification;import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;import java.util.List;public class MyAdapter extends PagerAdapter {private List<View> mListView;public MyAdapter(List<View> mListView) {this.mListView = mListView;}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {container.addView(mListView.get(position));return mListView.get(position);}@Overridepublic int getCount() {return mListView.size();}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {// 判断是否相等return view == object;}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView(mListView.get(position));}
}

MainActivity

package com.example.mynotification;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.viewpager.widget.ViewPager;import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);LayoutInflater lf = getLayoutInflater().from(this);View view1 = lf.inflate(R.layout.layout1, null);View view2 = lf.inflate(R.layout.layout2, null);View view3 = lf.inflate(R.layout.layout3, null);List<View> viewList = new ArrayList<>();viewList.add(view1);viewList.add(view2);viewList.add(view3);ViewPager viewPager = findViewById(R.id.vp);// 将上面的多个布局赋值给adapter中MyAdapter myAdapter = new MyAdapter(viewList);// 设置好adapterviewPager.setAdapter(myAdapter);}
}

6. Mvvm 项目架构


介绍一下MVP架构:

MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。

​—

mvvm架构如下:

7. Fragment 的 基本使用 和 介绍

7.1 Fragment的 产生


对于平板电脑和手机,fragment都非常实用。

7.2 什么是Fragment?


fragment是像一个子activity,具备独立的生命周期。

fragment必须委托在activity中才能运行,fragment会随着对应的activity的生命周期开始结束,当然fragment自己也具有独立的开始结束周期。

7.3 Fragment的 使用方法


创建一个Fragment:

会自动创建一个fragment的类和fragment对应的xml文件。

fragment_blank1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".BlankFragment1"><TextViewandroid:id="@+id/textview"android:layout_width="match_parent"android:layout_height="40dp"android:text="@string/hello_blank_fragment" /><Buttonandroid:layout_width="match_parent"android:layout_height="40dp"android:text="你好吗"android:id="@+id/btn"/></LinearLayout>

BlankFragment1

package com.example.fragmentbase;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;public class BlankFragment1 extends Fragment {private  View root;private TextView textView;private Button button;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if (root == null){// 通过inflater来定义好rootroot = inflater.inflate(R.layout.fragment_blank1, container, false);}// 可以直接通过root来操作fragment里面的内容textView = root.findViewById(R.id.textview);button = root.findViewById(R.id.btn);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {textView.setText("你好世界!!!!!!");}});return root;}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayouttools:context=".MainActivity"android:orientation="vertical"android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><!-- fragment的name属性来绑定到对应的类。 --><fragmentandroid:id="@+id/fragment1"android:name="com.example.fragmentbase.BlankFragment1"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

MainActivity

package com.example.fragmentbase;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

Android 开发学习(三)相关推荐

  1. android开发学习之路——连连看之加载图片(三)

    正如前面AbstractBoard类的代码中看到的,当程序需要创建N个Piece对象时,程序会直接调用ImageUtil的getPlayImages()方法去获取图片,该方法将会随机从res\ dra ...

  2. Android 开发学习记录(4)---- httpclient使用(三)

    之前在Android 开发学习记录(3)---- httpclient使用(二)中介绍了如何使用httpclient访问需要账户登录的网址,当然首先是要有一个合法的登录账户. 但是现在好多网站在登录时 ...

  3. android开发学习之路——连连看之游戏逻辑(五)

    GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...

  4. Android开发学习---使用Intelij idea 13.1 进行android 开发

    Android开发学习---使用Intelij idea 13.1 进行android 开发 原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为 ...

  5. 【嵌入式Android开发学习攻略】手把手教你循序渐进的学习

    [嵌入式Android开发学习攻略]手把手教你循序渐进的学习 学习嵌入式主要有以下几个方面: C语言:C是必须学的,它是最基础的 操作系统:Linux.Android   目前Linux是主流,这个一 ...

  6. android开发学习大体思路

    android开发学习: android学习的前提是java基础.如果你没有好的java基础,那就赶紧补充,我在这里不做介绍. android是基于linux的,如果你要做底层的东西,可以买一些关于l ...

  7. Android开发学习之以CameraAPI方式实现相机功能(一)——快速实现相机

    今天无意当中发现在<Android开发学习之基于ZBar实现微信扫一扫>中的一部分代码可以用来以硬件方式实现一个照相机的功能,在<Android开发学习之调用系统相机完成拍照的实现& ...

  8. android培训内容明细,记录Android开发学习

    记录Android开发学习 Menu菜单学习 1.掌握Android中菜单的创建. 2.掌握Intent信使组件. 创建菜单Menu 我们模仿微信菜单栏学习,创建一个于微信菜单栏相似的菜单 那么我们应 ...

  9. 《Java和Android开发学习指南(第2版)》—— 1.5 本章小结

    本节书摘来异步社区<Java和Android开发学习指南(第2版)>一书中的第1章,第1.5节,作者:[加]Budi Kurniawan,更多章节内容可以访问云栖社区"异步社区& ...

最新文章

  1. C++对象赋值的四种方式
  2. java 修改wav文件头_使用Java聲音API從WAV文件中修剪開頭和結尾
  3. poj2411 Mondriaan's Dream (状压dp+多米诺骨牌问题)
  4. 时隔七个月,我终于弄懂了汉诺塔的思想
  5. Spring中DispacherServlet、WebApplicationContext、ServletContext的关系
  6. python源码提取_Python提取Linux内核源代码的目录结构实现方法
  7. c语言利用遍历求树高的程序,用C语言实现二叉树的遍历极其应用
  8. JS-面向对象-原形对象链(自定义对象实例原形对象链 / 本地对象原形对象链)
  9. 用JavaScript和HTML5创建文件上传器
  10. Linux 网卡驱动学习(二)(网络驱动接口小结)
  11. C++中的异常处理(上)
  12. 3D图形原理和一些基本概念
  13. 基于Java swing实现的学生选课管理系统
  14. oracle 12c 行转列函数,oracle12cwm_concat函数人工写行转列函数
  15. 【财经期刊FM-Radio|2021年03月02日】
  16. 小程序跳转至企业微信客服wx.openCustomerServiceChat
  17. 2021华为鸿蒙发布会直播,2021 华为智能协作春季发布会直播(视频)
  18. 计算机文件保存方式,Word文档的三种保存方式
  19. 2020移动apn接入点哪个快_手机资讯:5G 网络和现在 iPhone 使用的 Wi-Fi 有什么区别速度会更快吗...
  20. 2019各大互联网公司产品校招笔试

热门文章

  1. 05-【公司解决问题】公司解决问题5之k8s问题(部署单元挂载存储卷启动报错:nfs挂载错误wrong fs type, bad option, bad superblock)
  2. 「观点」商业银行与金融科技发展
  3. 上传文件计算机传输的,两台电脑之间若何快速传输几百G的文件?
  4. 安卓通过WIFI修改电脑系统时间
  5. turtlebot matlab,Turtlebot与Matlab入门教程-控制小海龟
  6. RecyclerView多条目点击删除+图片接口拼接-MVP
  7. Sqlserver根据身份证号码查询年龄分布 籍贯分布DATEDIFF Case函数
  8. matplotlib.pyplot的全函数解释 API
  9. Tampermonkey(油泼狓)插件
  10. matlab 效度,如果某测验的效度系数为0.80,那么在实验中能够作出正确预测的比例是()...