Android實(shí)現(xiàn)純java代碼字體陰影效果,主要是通過activity的draw方法,進(jìn)行重新繪制,如下代碼:
站在用戶的角度思考問題,與客戶深入溝通,找到興山網(wǎng)站設(shè)計(jì)與興山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋興山地區(qū)。
package?canvas.test;
import?android.app.Activity;
import?android.os.Bundle;
import?android.content.Context;
import?android.graphics.Bitmap;
import?android.graphics.BitmapFactory;
import?android.graphics.Canvas;
import?android.graphics.Color;
import?android.graphics.Paint;
import?android.graphics.PorterDuff;
import?android.graphics.PorterDuff.Mode;
import?android.graphics.PorterDuffXfermode;
import?android.graphics.Rect;
import?android.graphics.RectF;
import?android.graphics.drawable.Drawable;
import?android.view.View;
public?class?ShaderEffect?extends?Activity?{
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(new?ImageEffect(this));
}
class?ImageEffect?extends?View{
Paint?paint;?
public?ImageEffect?(Context?context){
super(context);
paint?=?new?Paint();//初始化畫筆,為后面陰影效果使用。
paint.setAntiAlias(true);//去除鋸齒。
paint.setShadowLayer(5f,?5.0f,?5.0f,?Color.BLACK);//設(shè)置陰影層,這是關(guān)鍵。
paint.setXfermode(new?PorterDuffXfermode(Mode.SRC_IN));
}
@Override
public?void?onDraw(Canvas?canvas){
super.onDraw(canvas);
int?posX?=?20;
int?posY?=?50;
int?PicWidth,PicHegiht;?
Drawable?drawable?=?getResources().getDrawable(R.drawable.button);
Drawable?dbe?=?getResources().getDrawable(R.drawable.button).mutate();//如果不調(diào)用mutate方法,則原圖也會(huì)被改變,因?yàn)檎{(diào)用的資源是同一個(gè),所有對(duì)象是共享狀態(tài)的。
Drawable?drawTest?=?getResources().getDrawable(R.drawable.button);
Bitmap?bmp?=?BitmapFactory.decodeResource(getResources(),?R.drawable.button);
PicWidth?=?drawable.getIntrinsicWidth();
PicHegiht?=?drawable.getIntrinsicHeight();
drawTest.setBounds(posX,?(2?*?posY)?+?PicHegiht,?posX?+?PicWidth,?(2?*?posY)?+?2?*?PicHegiht?);
drawable.setBounds(posX,posY,posX+PicWidth,posY+PicHegiht);
dbe.setBounds(0,?0,?PicWidth,?PicHegiht);
canvas.drawColor(Color.WHITE);//設(shè)置畫布顏色
canvas.save(Canvas.MATRIX_SAVE_FLAG);
dbe.setColorFilter(0x7f000000,PorterDuff.Mode.SRC_IN);
canvas.translate(posX?+?(int)(0.9?*?PicWidth/2),?posY?+?PicHegiht/2);//圖像平移為了剛好在原圖后形成影子效果。
canvas.skew(-0.9F,?0.0F);//圖像傾斜效果。
canvas.scale(1.0f,?0.5f);//圖像(其實(shí)是畫布)縮放,Y方向縮小為1/2。
dbe.draw(canvas);//此處為畫原圖像影子效果圖,比原圖先畫,則會(huì)在下層。
drawable.clearColorFilter();
canvas.restore();
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawable.draw(canvas);//此處為畫原圖像,由于canvas有層次效果,因此會(huì)蓋在影子之上。
canvas.restore();
//默認(rèn)無效果原圖
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawTest.draw(canvas);
canvas.restore();
//圖片陰影效果
canvas.save(Canvas.MATRIX_SAVE_FLAG);
//Rect?rect?=?new?Rect(2*posX?+?PicWidth,?2*posY?+?PicHegiht,?2*posX?+?2*PicWidth,?2*posY?+?2*PicHegiht);//此為理論上的陰影圖坐標(biāo)
Rect?rect?=?new?Rect(2*posX?+?PicWidth?+?3,?2*posY?+?PicHegiht?+?3,?2*posX?+?2*PicWidth?-?2,?2*posY?+?2*PicHegiht?-?2);
//由于圖片的實(shí)際尺寸比顯示出來的圖像要大一些,因此需要適當(dāng)更改下大小,以達(dá)到較好的效果
RectF?rectF?=?new?RectF(rect);
canvas.drawRoundRect(rectF,?10f,?10f,?paint);//在原有矩形基礎(chǔ)上,畫成圓角矩形,同時(shí)帶有陰影層。
canvas.drawBitmap(bmp,?2*posX?+?PicWidth,?2*posY?+?PicHegiht,?null);//畫上原圖。
canvas.restore();
}
}
}
這是js...
dom的話設(shè)置div的top和bottom屬性,用setTimeout()或者setInterval()方法
jquery的話就簡(jiǎn)單了,直接用animate()方法,也是設(shè)置top和bottom屬性,slideUp()和slideDown()方法也行。
下面是WINDOW界面的代碼,用JAVA SWING寫的。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PlusWhile {
//主面板
private JFrame mainTop = null;
private JPanel inPanel = null; //輸入面板
private JPanel outPanel = null;//輸出面板
private JButton count = null; //按鈕
private JTextField inText = null; // 輸入文本框
private JTextField result = null;//結(jié)果文本框
private JLabel resultOut = null;//輸出提示
private JLabel remindIn = null;//輸入提示
//初始化方法
private void init() {
//組件實(shí)例化
mainTop = new JFrame("階乘計(jì)算器");
inPanel = new JPanel();
outPanel = new JPanel();
count = new JButton("計(jì)算");
inText = new JTextField(10);
result = new JTextField(10);
resultOut = new JLabel("計(jì)算的結(jié)果:");
remindIn = new JLabel("請(qǐng)輸入要計(jì)算的正整數(shù):");
//添加輸入組件
inPanel.add(remindIn);
inPanel.add(inText);
inPanel.add(count);
//添加輸出組件
outPanel.add(resultOut);
outPanel.add(result);
result.setEnabled(false);
//設(shè)置布局樣式
mainTop.setLayout(new BorderLayout());
//主面板添加組件
mainTop.add(inPanel, BorderLayout.NORTH);
mainTop.add(outPanel, BorderLayout.SOUTH);
//設(shè)置監(jiān)聽
count.addActionListener(new ButtonListener());
//設(shè)置屏顯位置
mainTop.setLocation(350 , 300);
mainTop.pack();
mainTop.setVisible(true);
mainTop.setAlwaysOnTop(true);
//設(shè)置關(guān)閉事件
mainTop.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//監(jiān)聽類
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
int inputNum = 0;
String input = inText.getText();
//若輸入為非數(shù)字,提示錯(cuò)誤
try {
inputNum = Integer.parseInt(input);
}catch(Exception e) {
inputNum = -1;
}
//輸入數(shù)值小于0,提示錯(cuò)誤
if(inputNum 0) {
inText.setText("請(qǐng)輸入正確的數(shù)值!");
result.setText("");
}
else if(inputNum == 0) {//輸入值為0處理
result.setText("1");
}
else {//輸入值為正整數(shù),計(jì)算階乘
int temp = inputNum;
while(inputNum 1) {
temp *= --inputNum;
}
result.setText(temp + "");
}
}
}
//入口方法
public static void main(String[] args) {
new PlusWhile().init();
}
}
有什么不明白的繼續(xù)補(bǔ)充,呵呵。 加點(diǎn)兒分不。
要java在windows下的cmd下實(shí)現(xiàn)清屏,唯一的方案,就是通過JNI調(diào)用一個(gè)庫文件(.dll),這個(gè)dll中包含一個(gè)實(shí)現(xiàn)清屏功能(system(“cls”))的導(dǎo)出函數(shù)。
在java程序中加入代碼調(diào)用這個(gè)庫,即可實(shí)現(xiàn)當(dāng)前屏幕的清屏。
實(shí)現(xiàn)步驟:
1.寫一個(gè)dll.h
#ifndef _Included_Cls
#define _Included_Cls
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT void JNICALL Java_Cls_clear
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
2.再寫一個(gè)dllmain.c
#include "jni.h"
#include "dll.h"
#include "stdlib.h"
JNIEXPORT void JNICALL Java_Cls_clear(JNIEnv *env, jobject obj)
{
system("cls");
}
3.用vc++建立一個(gè)dll工程(我的工程名為clsTest)
導(dǎo)入dllmain.c 和dll.h以及jdk下include目錄下的jni.h和include/win32下的jni_md.h 共四個(gè)文件
然后build 這個(gè)dll工程,將生成的clsTest.dll放入到你的java.library.path中的其中一個(gè)目錄下
查看java.libray.path用代碼System.out.print(System.setProperty("java.library.path","."));
我是根據(jù)我的配置將clsTest.dll放到C:/Program Files/Java/jdk1.6.0/jre/bin下
4.測(cè)試
新建一個(gè)測(cè)試類Test.java
public class Test{
public native void clear();//左方的native是通知Java這個(gè)函數(shù)會(huì)使用到外部函數(shù)
static {
System.loadLibrary("clsTest"); //左方的代碼代表我要載入clsTest.dll的動(dòng)態(tài)鏈接
}
public static void main(String[] args) {
final Test a=new Test();
Runnable k=new Runnable(){
public void run(){
for(int i=0;i20;i++){
System.out.println(i);
try {
Thread.sleep(1000);
a.clear();
} catch (Exception e) {
}
}
}
};
k.run();//執(zhí)行線程
}
}
5.在cmd下 javac Test.java
改為,你的boolean數(shù)組沒有初始化,bar[0]取到的為null,if(null){} 編譯通不過去
1. String foo = “blue”;
2. Boolean[] bar = {true};
3. if (bar[0]) {
4. foo = “green”;
5. }