关于Timer:
1.全局变量可以取消,取消之后无法重新使用。
创建定时器:
Timer timer=new Timer();
2.安排时间:
延迟时钟:
TimerTask timerTask=new TimerTask() {
@Override
public void run() {
//
}
};
timer.schedule(timerTask,0);//写在方法中
延时一次的循环时钟:
TimerTask timerTask=new TimerTask() {
@Override
public void run() {
//
}
};
timer.schedule(timerTask,0,0);//写在方法中
// 延时一次时间,开始每一个循环前的时间
3.怎么使用时种处理UI界面:
TimerTask timerTask=new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 3;
handler.sendMessage(message);
}
};
timer.schedule(timerTask,0,0);//写在方法中
// 延时一次时间,开始每一个循环前的时间
用到:Handle
Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
Switch(msg.what){
case 1:
//
break;
case 2:
//
break;
case 3:
//
break;
//.....
}
}
}
关于父子容器(子容器的移动及布局):
xml布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<LinearLayout
android:id="@+id/s1_pl"
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
>
</LinearLayout>
</RelativeLayout>
java动态控制:
public class Inits1Activity extends AppCompatActivity {
private LinearLayout mL;
private ImageView m1,h1,h2,h3;
private LinearLayout pL;
private ImageView p,bg1,bg2;
private ProgressBar progressBar1,progressBar2,progressBar3,progressBar4;
Timer timer;
AnimationDrawable animationDrawablep,animationDrawablem1;
private RelativeLayout.LayoutParams paramsBg1,m1params;
private int pwalkx=20,pwalky=400,pwalkrate=4;
private int m1walkx=20,m1walky=400,m1walkrate=4,M1=0;
private int totalx,totaly;
private int bg1x=0,bg2x;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inits1);
pL=(LinearLayout)findViewById(R.id.s1_pl);
private RelativeLayout.LayoutParams params;//定义父容器RelativeLayout的子容器LayoutParams
//params
params.setMargins(pwalkx,pwalky,0,0);//子容易设置位置,如果想设置更多,可以自行去搜索
// 左,上,
pL.setLayoutParams(params);//在主方法中进行UI处理,初始化
//在子线程中必须通过handle等处理这句
}
}
关于动画:
1.xml控制,需要新建anim文件夹,在其中设置布局:
以下为平移动画:
android:duration="100" 每一帧的播放时间
android:repeatMode="restart"播放方式
android:fillAfter="true"停留最后一帧
android:fromXDelta="0.0" 开始位置
android:fromYDelta="0.0"
android:toXDelta="10" 结束位置
android:toYDelta="0.0"
<?xml version="1.0" encoding="utf-8"?>
<set android:duration="100" android:repeatMode="restart"
android:fillAfter="true"
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0.0"
android:fromYDelta="0.0"
android:toXDelta="10"
android:toYDelta="0.0"
/>
</set>
其他动画还有渐变,旋转,缩放,可自行了解。
2.java动态控制:
以下为透明渐变动画:
private AlphaAnimation animation;
private void setAnimation(LinearLayout layout){//自己定义控件类型
animation=new AlphaAnimation(0.0f,1.0f);//渐变从0到1
animation.setDuration(500);
layout.startAnimation(animation);
}
背景动画
布局xml:
<ImageView
android:id="@+id/s1_people"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/people_walking_soldiers"//以下为展示
android:visibility="visible"
/>
drawable——xml:
一个item为一帧。
java动态控制:
AnimationDrawable animationDrawablep;
animationDrawablep=(AnimationDrawable) p.getBackground();
animationDrawablep.start();
animationDrawablep.stop();
关于声音:
需要新建raw文件夹
private MediaPlayer mediaPlayer=new MediaPlayer();
@Override
public boolean onTouch(View v, MotionEvent event) {//写在onTouchListener中
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//音乐类型
if(event.getAction()==MotionEvent.ACTION_DOWN){//按下的声音
mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.button_1);
mediaPlayer.start();
}
if(event.getAction() == MotionEvent.ACTION_UP){//抬起来的声音
mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.button_2);
mediaPlayer.start();
}
return false;//不点击完触发的一个过程
}
}
关于获取屏幕的长和宽:
WindowManager windowManager=getWindowManager();//父容器为窗口管理器
Display display=windowManager.getDefaultDisplay();
DisplayMetrics metrics=new DisplayMetrics();
display.getMetrics(metrics);
totalx=metrics.widthPixels;
totaly=metrics.heightPixels;
关于点击与触摸:
同时定义的代码:
ButtonListener buttonListener=new ButtonListener();
start.setOnClickListener(buttonListener);
start.setOnTouchListener(buttonListener);
end.setOnClickListener(buttonListener);
end.setOnTouchListener(buttonListener);
pt.setOnClickListener(buttonListener);
pt.setOnTouchListener(buttonListener);
}
class ButtonListener implements View.OnClickListener, View.OnTouchListener {
public void onClick(View v) {
if (v.getId() == R.id.main_exit) {
System.exit(0);
}
else if(v.getId()==R.id.pt_btn){
pt.setVisibility(View.GONE);
ptv.setVisibility(View.VISIBLE);
settvAnimation(ptv);
}
else if(v.getId()==R.id.start_btn){
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
mediaPlayer.release();
mediaPlayer=null;
}
}
private MediaPlayer mediaPlayer=new MediaPlayer();
@Override
public boolean onTouch(View v, MotionEvent event) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
if(event.getAction()==MotionEvent.ACTION_DOWN){
mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.button_1);
mediaPlayer.start();
}
if(event.getAction() == MotionEvent.ACTION_UP){
mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.button_2);
mediaPlayer.start();
}
return false;
}
}