今天学习了android的动画,除此之外还根据自己的需求做了一个小软件(跟动画无关);
首先是动画的学习,android里面的动画主要分为帧动画,补间动画已经属性动画;android动画的含义是随着时间轴的推移,使控件发送位移,旋转或者改变视图从而达到动画的效果,首先是帧动画,我们可以通过xml文件定义一个帧动画如下(帧动画存放在res/drawable)下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:duration="500"
android:drawable="@drawable/im1">
</item>
<item android:duration="500"
android:drawable="@drawable/im2">
</item>
<item android:duration="500"
android:drawable="@drawable/im3">
</item>
</animation-list>
上述代码定义了一个帧动画,android:oneshot的值表示是否循环播放,置为false的时候,动画循环播放;此动画是一个帧动画,效果是三张图片轮回播放,android:duration的属性表示此帧的持续时间;
定义了之后需要在java代码中启动该动画,如下代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView image = (ImageView)findViewById(R.id.image);
((AnimationDrawable) image.getBackground()).start();
}
}
其次是补间动画,此动画类型的操作是让某个控件展现出旋转、渐变、移动、缩放的一种转换过程,关于补间动画和属性动画,这篇文章
android --动画讲的比较清楚并配有图片示例,在此不多做叙述。
今天干的另一件事情是做了一个小的软件,原因是在翻译论文的时候发现google翻译对于回车的识别不是很好,如果不是到行尾进行的自动换行,它则将一行视为一个整体,导致了在论文翻译的时候很麻烦,其次是因为翻译论文需要一句话一句话翻译,而要去找一句话还是比较费劲的,因为你要在PDF上看得比较仔细才能找到那个句号".";所以我干脆写了一个句型转换的算法,其功能是将回车自动消除,如果是两个单词,则回车换为空格,如果是连续单词的分行,则将“-”消掉,使其成为一个连贯的单词;除此之外还提供段落中识别句子的功能,将段落划分为几个完整的句子,实现代码如下:
1.工具类接口
package utils;
public interface ChangeStyle {
public String Change(String source);
}
2.接口的实现:
package utils;
public class MyChange2 implements ChangeStyle {
@Override
public String Change(String source) {
// TODO Auto-generated method stub
if(source == null)
{
return null;
}
String[] arg = source.split("\\.");
String pro = new String();
for(int j = 0;j<arg.length;j++)
{
StringBuffer s = new StringBuffer(arg[j]);
String s1 = arg[j];
int length = s1.length();
for(int i = 0;i<length;i++)
{
if(s1.charAt(i) == '\n'&& i != length-1)
{
if(s1.charAt(i+1) == '-')
{
s.replace(i, i+2, "");
}
else
{
s.replace(i, i+1, " ");
}
}
}
pro = pro + "\n" + s.toString();
}
return pro;
}
}
3.UI界面
package ui;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Draw {
private JFrame frame = new JFrame("格式转换");
private JLabel source = new JLabel("源字符");
private JLabel pros = new JLabel("转换字符");
private JButton button = new JButton("转换");
private JTextArea sourceText = new JTextArea ();
private JTextArea proText = new JTextArea ();
private JScrollPane jslp = new JScrollPane(sourceText);
private JScrollPane jsl = new JScrollPane(proText);
private int width;
private int height;
public Draw()
{
width = Toolkit.getDefaultToolkit().getScreenSize().width;
height = Toolkit.getDefaultToolkit().getScreenSize().height;
//水平滚动条总是显示
jslp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//垂直滚动条总是显示
jslp.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
//水平滚动条总是显示
jsl.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//垂直滚动条总是显示
jsl.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.setLayout(null);
frame.setSize(800, 600);
source.setBounds(5, 5, 50, 20);
jslp.setBounds(5, 30,300 , 500);
button.setBounds(320, 400, 70, 50);
pros.setBounds(405, 5, 100, 20);
jsl.setBounds(405, 30, 800, 500);
frame.add(source);
frame.add(jslp);
frame.add(pros);
frame.add(jsl);
frame.add(button);
frame.setBounds((width - 800) / 2,
(height - 600) / 2, 800, 600);
frame.setVisible(true);
}
public JTextArea getSource()
{
return this.sourceText;
}
public JTextArea getPro()
{
return this.proText;
}
public void setPro(String pro)
{
this.proText.setText(pro);
}
public void setSource(String source)
{
this.sourceText.setText(source);
}
public JButton getButton()
{
return this.button;
}
}
4.Main函数
package main;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import ui.Draw;
import utils.MyChange;
import utils.MyChange2;
public class MainAct {
public static void main(String[] args)
{
Draw window = new Draw();
MyChange c = new MyChange();
MyChange2 c2 = new MyChange2();
JButton button = window.getButton();
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
String source = window.getSource().getText().trim();
String pro = c2.Change(source);
window.setPro(pro);
}
}
);
}
}
在开发中遇到了一些小细节,需要注意:
1.String类提供的split函数传入的参数为正则表达式,比如需要以"."进行切分句子的时候,需要写为: string.split("\\.");
2.textarea文本框并不自动添加滑动框,需要进行设置,使用JScrollPane对象;
3.在构建工程的时候需要划分清结构,第一次主动使用接口完成项目,并将UI界面与Main区分开,是的结构比较清晰;
4.String类的方法replace是替换全部,如果要替换某个指定位置,可以先使用string去创建一个StringBuffer,在找到该位置之后使用stringbuffer中的replace函数,可以进行指定位置的替换。