《android开发-从小工到专家》学习记录(五)

今天学习了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函数,可以进行指定位置的替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值