本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订 。
TETRIS 项目开发笔记 - manue1 阅读原文»
java学习一个月了,没有什么进展,期间又是复习Linux,又是看Android,瞻前顾后,感觉自己真的是贪得无厌,
学习的东西广而不精,所以写出的文章也就只能泛泛而谈。五一小长假,哪里都没有去,也不想去,刚刚无聊刷新了下
朋友圈,朋友们不是在玩,就是在吃,突然一下子感觉自己老了许多。岁月真是把杀猪刀,夺走了我们的青春,但却无
法夺走我们的激情。
好好复习了!
在老师引领下,算是把人生中的第一个Java项目敲完了,感觉对于学习OOP的朋友,应该有所帮助,先做个笔记吧
等后期有时间再添些自己的Feature。
package com.manue1.tetris;
import javax.swing.JFrame;
/**
* 游戏窗口
* @author Manue1
* @version 1.0
*
*/
public class GameFrame extends JFrame{
private static final long serialVersionUID = 1L;
private Tetris tetris;
public GameFrame(){
tetris =new Tetris();
add(tetris);
setSize(530,580);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
public static void main(String[] args){
GameFrame frame =new GameFrame();
frame.setVisible(true);
frame.tetris.action(); //创建4个格子
}
}
import javax.swing.JFrame;
/**
* 游戏窗口
* @author Manue1
* @version 1.0
*
*/
public class GameFrame extends JFrame{
private static final long serialVersionUID = 1L;
private Tetris tetris;
public GameFrame(){
tetris =new Tetris();
add(tetris);
setSize(530,580);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
public static void main(String[] args){
GameFrame frame =new GameFrame();
frame.setVisible(true);
frame.tetris.action(); //创建4个格子
}
}
1 package com.manue1.tetris;
2
3 import java.awt.image.BufferedImage;
4
5 /**
6 * 定义格子
7 * @author Manue1
8 */
9 public class Cell extends Object{
10 private int row; int col;
11 private BufferedImage image;
12
13 public Cell(int row, int col, BufferedImage image) {
14 super();
15 this.row = row;
16 this.col = col;
17 this.image = image;
18 }
19
20 public int getRow() {
21 return row;
22 }
23
24 public void setRow(int row) {
25 this.row = row;
26 }
27
28 public int getCol() {
29 return col;
30 }
31
32 public void setCol(int col) {
33 this.col = col;
34 }
35
36 public BufferedImage getImage() {
37 return image;
38 }
39
40 public void setImage(BufferedImage image) {
41 this.image = image;
42 }
43
44 @Override
45 public String toString() {
46 return "Cell [col=" + col + ", image=" + image + ", row=" + row + "]";
47 }
48
49
50 public void moveLeft(){
51 col--;
52 }
53 public void moveRight(){
54 col++;
55 }
56 public QQ5.0左侧滑动显示效果 - 小破孩123 阅读原文»
2
3 import java.awt.image.BufferedImage;
4
5 /**
6 * 定义格子
7 * @author Manue1
8 */
9 public class Cell extends Object{
10 private int row; int col;
11 private BufferedImage image;
12
13 public Cell(int row, int col, BufferedImage image) {
14 super();
15 this.row = row;
16 this.col = col;
17 this.image = image;
18 }
19
20 public int getRow() {
21 return row;
22 }
23
24 public void setRow(int row) {
25 this.row = row;
26 }
27
28 public int getCol() {
29 return col;
30 }
31
32 public void setCol(int col) {
33 this.col = col;
34 }
35
36 public BufferedImage getImage() {
37 return image;
38 }
39
40 public void setImage(BufferedImage image) {
41 this.image = image;
42 }
43
44 @Override
45 public String toString() {
46 return "Cell [col=" + col + ", image=" + image + ", row=" + row + "]";
47 }
48
49
50 public void moveLeft(){
51 col--;
52 }
53 public void moveRight(){
54 col++;
55 }
56 public QQ5.0左侧滑动显示效果 - 小破孩123 阅读原文»
前三篇为大家介绍了如何实现简单的类QQ5.0左侧的侧滑效果,本篇我将带领大家一起探讨一下如何真正实现QQ5.0左侧的侧滑效果,对于本篇的内容与之前的三篇关联性很强,如果前三篇你已经完全掌握,对于这一篇相信也没有什么难处,本篇的重点在于通过Android3.0以后提供的属性动画实现上述显示特效。
开始之前首先给大家说句抱歉,前三篇由于我自己的编码问题,导致如果你还是以之前的代码设计时,会出现Menu的背景图没有填充整个屏幕,这个怎么解决呢?
在left_menu.xml中,将background修改为android:background="#0000";
activity_main.xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:hyman="http://schemas.android.com/apk/res/com.example.android_qq_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<com.example.menu.SlidingMenu
android:id="@+id/slidingMenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/img_frame_background"
hyman:rightPadding="100dp" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<include layout="@layout/left_menu"/>"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/qq"
>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切换按钮"
/>
</LinearLayout>
</LinearLayout>
</com.example.menu.SlidingMenu>
</RelativeLayout>
xmlns:tools="http://schemas.android.com/tools"
xmlns:hyman="http://schemas.android.com/apk/res/com.example.android_qq_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<com.example.menu.SlidingMenu
android:id="@+id/slidingMenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/img_frame_background"
hyman:rightPadding="100dp" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<include layout="@layout/left_menu"/>"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/qq"
>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切换按钮"
/>
</LinearLayout>
</LinearLayout>
</com.example.menu.SlidingMenu>
</RelativeLayout>
将背景图片添加蓝色标注处。
其他部分无需改变,下面我们开始分析如何通过属性动画来实现上述效果:
/**
* 实现抽屉式侧滑效果
*/
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {//l相当于getScrollX()表示Menu左侧的偏移量
super.onScrollChanged(l, t, oldl, oldt);
/**
* 区别1:内容区域1.0~0.7 缩放的效果 scale : 1.0~0.0 0.7 + 0.3 * scale
*
* 区别2:菜单的偏移量需要修改
*
* 区别3:菜单的显示时有缩放以及透明度变化 缩放:0.7 ~1.0 1.0 - scale * 0.3 透明度 0.6 ~ 1.0
* 0.6+ 0.4 * (1- scale) ;
*
*/
//设置Menu的显示OR隐藏动画
float scroll = l * 1.0f /mMenuWidth;//1~0
ViewHelper.setTranslationX(mMenu, mMenuWidth*scroll*0.7f);
//设置Menu的透明度变化
float leftScale = 0.6f+ 0.4f * (1- scroll);
ViewHelper.setScaleX(mMenu, leftScale);
ViewHelper.setScaleY(mMenu, leftScale);
//设置Menu的缩放比例
float leftAlpha = 1.0f - scroll * 0.3f;
ViewHelper.setAlpha(mMenu, leftAlpha);
//设置Content的缩放中心
ViewHelper.setPivotX(mContent, 0);
ViewHelper.setPivotY(mContent, mContent.getHeight()/2);
//设置Content的透明度变化
float rightScale = 0.7f + 0.3f * scroll;
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale);
}
* 实现抽屉式侧滑效果
*/
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {//l相当于getScrollX()表示Menu左侧的偏移量
super.onScrollChanged(l, t, oldl, oldt);
/**
* 区别1:内容区域1.0~0.7 缩放的效果 scale : 1.0~0.0 0.7 + 0.3 * scale
*
* 区别2:菜单的偏移量需要修改
*
* 区别3:菜单的显示时有缩放以及透明度变化 缩放:0.7 ~1.0 1.0 - scale * 0.3 透明度 0.6 ~ 1.0
* 0.6+ 0.4 * (1- scale) ;
*
*/
//设置Menu的显示OR隐藏动画
float scroll = l * 1.0f /mMenuWidth;//1~0
ViewHelper.setTranslationX(mMenu, mMenuWidth*scroll*0.7f);
//设置Menu的透明度变化
float leftScale = 0.6f+ 0.4f * (1- scroll);
ViewHelper.setScaleX(mMenu, leftScale);
ViewHelper.setScaleY(mMenu, leftScale);
//设置Menu的缩放比例
float leftAlpha = 1.0f - scroll * 0.3f;
ViewHelper.setAlpha(mMenu, leftAlpha);
//设置Content的缩放中心
ViewHelper.setPivotX(mContent, 0);
ViewHelper.setPivotY(mContent, mContent.getHeight()/2);
//设置Content的透明度变化
float rightScale = 0.7f + 0.3f * scroll;
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale);
}
需要提示的就是对于Android3.0以下的系统,不支持属性动画效果,在这里我导入了一个包,大家如果需要可以留言。好了,到这里我们的侧滑效果就完全为大家实现了,请欣赏效果图:
本文链接:QQ5.0左侧滑动显示效果,转载请注明。
没有评论:
发表评论