1
0
mirror of https://gitee.com/51danju/workclock.git synced 2025-06-07 19:34:05 +08:00

可以进入全屏模拟走钟样式,及更多背景动画

This commit is contained in:
wushunlian 2019-03-09 14:38:58 +08:00
parent cac96e3f43
commit 69beeb73d8
5 changed files with 108 additions and 73 deletions

View File

@ -133,7 +133,7 @@ public class MainActivity extends Activity implements Handler.Callback, View.OnC
fontStyleList.add(new TimeFontStyle("affair",110,120,130,150)); fontStyleList.add(new TimeFontStyle("affair",110,120,130,150));
fontStyleList.add(new TimeFontStyle("agenda",140,150,160,180)); fontStyleList.add(new TimeFontStyle("agenda",140,150,160,180));
fontStyleList.add(new TimeFontStyle("cheapfire",110,120,130,150)); fontStyleList.add(new TimeFontStyle("cheapfire",140,150,160,180));
fontStyleList.add(new TimeFontStyle("cherif",80,100,110,140)); fontStyleList.add(new TimeFontStyle("cherif",80,100,110,140));
fontStyleList.add(new TimeFontStyle("Cigar Box Guitar",120,130,140,150)); fontStyleList.add(new TimeFontStyle("Cigar Box Guitar",120,130,140,150));
fontStyleList.add(new TimeFontStyle("Ciung Wanara Sejati",110,120,130,150)); fontStyleList.add(new TimeFontStyle("Ciung Wanara Sejati",110,120,130,150));
@ -176,9 +176,9 @@ public class MainActivity extends Activity implements Handler.Callback, View.OnC
fontStyleList.add(new TimeFontStyle("Xtra Power",100,110,120,160)); fontStyleList.add(new TimeFontStyle("Xtra Power",100,110,120,160));
fontStyleList.add(new TimeFontStyle("海报圆圆",110,120,130,150)); fontStyleList.add(new TimeFontStyle("海报圆圆",110,120,130,150));
fontStyleList.add(new TimeFontStyle("爱心小兔",80,100,110,140)); fontStyleList.add(new TimeFontStyle("爱心小兔",110,115,130,140));
fontStyleList.add(new TimeFontStyle("王漢宗海報體一半天水",110,120,130,150)); fontStyleList.add(new TimeFontStyle("王漢宗海報體一半天水",110,120,130,150));
fontStyleList.add(new TimeFontStyle("立体铁山硬笔行楷简",110,120,130,150)); fontStyleList.add(new TimeFontStyle("立体铁山硬笔行楷简",120,130,140,180));
fontStyleList.add(new TimeFontStyle("腾祥倩心简",110,120,130,150)); fontStyleList.add(new TimeFontStyle("腾祥倩心简",110,120,130,150));
fontStyleList.add(new TimeFontStyle("苏新诗毛糙体简",110,120,130,150)); fontStyleList.add(new TimeFontStyle("苏新诗毛糙体简",110,120,130,150));
fontStyleList.add(new TimeFontStyle("谁能许我扶桑花期",110,120,130,150)); fontStyleList.add(new TimeFontStyle("谁能许我扶桑花期",110,120,130,150));
@ -238,12 +238,11 @@ public class MainActivity extends Activity implements Handler.Callback, View.OnC
} }
private void setFontSize(int fontSize){ private void setFontSize(int fontSize){
tv_time.setText("", TextView.BufferType.NORMAL);
tv_time.setTextSize(fontSize); tv_time.setTextSize(fontSize);
} }
private TextView tv_time; private DigitTextView tv_time;
private TextView tv_date; private TextView tv_date;
private TextView tv_day; private TextView tv_day;
private TextView tv_weather; private TextView tv_weather;
@ -1206,26 +1205,26 @@ public class MainActivity extends Activity implements Handler.Callback, View.OnC
clockAnimator = new ClockAnimator(); clockAnimator = new ClockAnimator();
clockAnimator.init(clockView.getContext(),clockView); clockAnimator.init(clockView.getContext(),clockView);
clockAnimator.setColor(foregroundColor); clockAnimator.setColor(foregroundColor);
if(index>5) if(index>4)
currentClockAnimatorIndex=index=0; currentClockAnimatorIndex=index=0;
switch (index) { switch (index) {
case 0: case 0:
clockAnimator.setClock(new CircleClock()); clockAnimator.setClock(new CircleClock());
break; break;
case 3: case 2:
clockAnimator.setClock(new OvalClock()); clockAnimator.setClock(new OvalClock());
break; break;
case 2: case 1:
clockAnimator.setClock(new SquareClock()); clockAnimator.setClock(new SquareClock());
break; break;
case 1: //case 3:
clockAnimator.setClock(new OctagonalClock()); // clockAnimator.setClock(new OctagonalClock());
break; // break;
case 4: case 3:
clockAnimator.setClock(new HexagonalClock()); clockAnimator.setClock(new HexagonalClock());
break; break;
case 5: case 4:
clockAnimator.setClock(new HelixClock()); clockAnimator.setClock(new HelixClock());
break; break;
default: default:
@ -1371,42 +1370,19 @@ public class MainActivity extends Activity implements Handler.Callback, View.OnC
} }
} }
DigitTextView.DigitSpan digitSpan,digitSpan1;
DigitTextView.DigitSmallSpan digitSpan2;
SpannableString spannable;
DigitTextView.DigitFlagSpan digitFlagSpan;
private void setCurrentTimeToView(String timeString){ private void setCurrentTimeToView(String timeString){
if(isArtificialHiddle) if(isArtificialHiddle)
return; return;
spannable = new SpannableString(timeString);
if(digitSpan==null) {
digitSpan = new DigitTextView.DigitSpan();
digitSpan1 = new DigitTextView.DigitSpan();
digitSpan2 = new DigitTextView.DigitSmallSpan();
digitFlagSpan=new DigitTextView.DigitFlagSpan();
}
if(isFullScreen){ if(isFullScreen){
digitSpan.setBeseLineDown(0); tv_time.setBaseLineDown(0);
digitSpan1.setBeseLineDown(0);
digitFlagSpan.setBeseLineDown(0);
digitSpan2.setBeseLineDown(0);
}else{ }else{
float baseLineDown=tv_date.getHeight()/2; tv_time.setBaseLineDown(tv_day.getHeight()/2);
digitSpan.setBeseLineDown(baseLineDown);
digitSpan1.setBeseLineDown(baseLineDown);
digitFlagSpan.setBeseLineDown(baseLineDown);
digitSpan2.setBeseLineDown(baseLineDown);
} }
spannable.setSpan(digitSpan,0,2,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv_time.setText(timeString);
spannable.setSpan(digitFlagSpan,2,3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(digitSpan1,3,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if(timeString.length()>5)
spannable.setSpan(digitSpan2,5,8,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//tv_time.setText(spannable, TextView.BufferType.SPANNABLE);
tv_time.setText(spannable, TextView.BufferType.NORMAL);
//tv_time.setText(timeString);
} }
boolean heartbeat=false; boolean heartbeat=false;
private void updateTime() { private void updateTime() {
heartbeat=!heartbeat; heartbeat=!heartbeat;

View File

@ -1,21 +1,19 @@
package clock.socoolby.com.clock.widget.textview; package clock.socoolby.com.clock.widget.textview;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Paint; import android.graphics.Paint;
import android.os.Build;
import android.text.TextPaint; import android.text.TextPaint;
import android.text.style.ReplacementSpan; import android.text.style.ReplacementSpan;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.widget.TextView;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
@SuppressLint("AppCompatCustomView") public class DigitTextView extends android.support.v7.widget.AppCompatTextView {
public class DigitTextView extends TextView { public static final String Tag=DigitTextView.class.getSimpleName();
float baseLineDown=0;
public DigitTextView(Context context) { public DigitTextView(Context context) {
super(context); super(context);
} }
@ -28,9 +26,69 @@ public class DigitTextView extends TextView {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
} }
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public void setBaseLineDown(float baseLineDown) {
public DigitTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { this.baseLineDown = baseLineDown;
super(context, attrs, defStyleAttr, defStyleRes); }
protected void onDraw(Canvas canvas) {
int color = getCurrentTextColor();
Paint mTextPaint=getPaint();
mTextPaint.setColor(color);
CharSequence textToDraw=getText();
Paint.FontMetricsInt fm=mTextPaint.getFontMetricsInt();
int baseCharWidth= getCharWidth("8",mTextPaint);
int flagCharwidth=getCharWidth(":",mTextPaint);
int textHight=-fm.descent - fm.ascent;
int smallTextHight=0;
int smallCharWidth=0;
Paint smallCharPaint=null;
int textLength=textToDraw.length();
int textWidth=0;
int textSmallSpan=0;
if(textLength>4){
textWidth=baseCharWidth*4+flagCharwidth;
}
if(textLength>7){
float fontScale = getResources().getDisplayMetrics().scaledDensity;
smallCharPaint = getCustomTextPaint(mTextPaint,mTextPaint.getTextSize()/fontScale*4/5);
smallCharWidth=getCharWidth("8",smallCharPaint);
fm=smallCharPaint.getFontMetricsInt();
smallTextHight=-fm.descent - fm.ascent;
textSmallSpan=smallCharWidth*2;
}
float startX=(getWidth()-textWidth-textSmallSpan)/2;
float startY=(getHeight()+textHight)/2;
for(int i=0;i<textLength;i++){
String c=String.valueOf(textToDraw.charAt(i));
int charWidth= getCharWidth("8",mTextPaint);
if(i<5){
if(i==2){
canvas.drawText(c, startX, startY+baseLineDown, mTextPaint);
startX+=flagCharwidth;
}else{
canvas.drawText(c, startX+(baseCharWidth-charWidth)/2, startY+baseLineDown, mTextPaint);
startX+=baseCharWidth;
}
}else if(i==5) {
startX+=smallCharWidth/2;
} else {
float centerY=(getHeight()+smallTextHight)/2;
centerY=centerY+(startY-centerY)/2+smallCharPaint.getFontMetrics().descent;
canvas.drawText(c, startX, centerY+baseLineDown, smallCharPaint);
startX+=smallCharWidth;
Log.d(Tag,"view hight:"+getHeight()+"\t startY:"+startY+"\t text hight:"+textHight+"small text hight:"+smallTextHight);
}
}
} }
/** /**
@ -118,7 +176,7 @@ public class DigitTextView extends TextView {
String text1 = text.subSequence(start, end).toString(); String text1 = text.subSequence(start, end).toString();
//Log.d("DigitSpan","getSize text:"+text+"\tstart:"+start+"\tend:"+end+"\tsubStr:"+text1); //Log.d("DigitSpan","getSize text:"+text+"\tstart:"+start+"\tend:"+end+"\tsubStr:"+text1);
fontSizeSp=paint.getTextSize()/2; fontSizeSp=paint.getTextSize()/2;
Paint p = getCustomTextPaint(paint); Paint p = getCustomTextPaint(paint,fontSizeSp);
return (int) getCharWidth("8",p)*text1.length(); return (int) getCharWidth("8",p)*text1.length();
} }
@ -131,7 +189,7 @@ public class DigitTextView extends TextView {
return; return;
//Log.d("DigitSpan","draw text:"+text+"\tstart:"+start+"\tend:"+end+"\tsubStr:"+text1); //Log.d("DigitSpan","draw text:"+text+"\tstart:"+start+"\tend:"+end+"\tsubStr:"+text1);
Paint.FontMetricsInt fmBefor=paint.getFontMetricsInt(); Paint.FontMetricsInt fmBefor=paint.getFontMetricsInt();
Paint p = getCustomTextPaint(paint); Paint p = getCustomTextPaint(paint,fontSizeSp);
Paint.FontMetricsInt fm = p.getFontMetricsInt(); Paint.FontMetricsInt fm = p.getFontMetricsInt();
int baseCharWitch= getCharWidth("8",p); int baseCharWitch= getCharWidth("8",p);
for(int i=1;i<text1.length();i++) { for(int i=1;i<text1.length();i++) {
@ -143,17 +201,18 @@ public class DigitTextView extends TextView {
} }
} }
private TextPaint getCustomTextPaint(Paint srcPaint) {
TextPaint paint = new TextPaint(srcPaint);
paint.setTextSize(fontSizeSp); //设定字体大小, sp转换为px
return paint;
}
public void setBeseLineDown(float beseLineDown){ public void setBeseLineDown(float beseLineDown){
this.beseLineDown=beseLineDown; this.beseLineDown=beseLineDown;
} }
} }
private static TextPaint getCustomTextPaint(Paint srcPaint,float fontSizeSp) {
TextPaint paint = new TextPaint(srcPaint);
paint.setTextSize(fontSizeSp); //设定字体大小, sp转换为px
return paint;
}
public static class SuperSubSpan extends ReplacementSpan public static class SuperSubSpan extends ReplacementSpan
{ {

View File

@ -213,14 +213,13 @@ public class SmashAnimator {
public void startRandomAnimator(){ public void startRandomAnimator(){
Random random=new Random(); Random random=new Random();
mStyle=random.nextInt(STYLE_MAX_ID); mStyle=random.nextInt(STYLE_MAX_ID);
//if(mStyle<=0) if(mStyle<=0)
// mStyle=1; mStyle=1;
if(mStyle<RANDOM_EFFECT_TYPE_SQUARE) //if(mStyle<RANDOM_EFFECT_TYPE_SQUARE)
mStyle=RANDOM_EFFECT_TYPE_SQUARE+random.nextInt(3); // mStyle=RANDOM_EFFECT_TYPE_SQUARE+random.nextInt(3);
if(mStyle>= RANDOM_EFFECT_TYPE_SQUARE){ if(mStyle>= RANDOM_EFFECT_TYPE_SQUARE){
mEndValue=1.0f; mEndValue=1.0f;
mStartDelay=0; mStartDelay=0;
//mDuration=mDuration*2;
mValueAnimator.setFloatValues(0F, mEndValue); mValueAnimator.setFloatValues(0F, mEndValue);
initCurtainEffect(mStyle); initCurtainEffect(mStyle);
mAnimatorView.setVisibility(View.GONE); mAnimatorView.setVisibility(View.GONE);

View File

@ -31,15 +31,6 @@
android:background="#00FFFFFF" android:background="#00FFFFFF"
> >
<TextView
android:id="@+id/tv_time"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:textColor="#fff"
android:textSize="180sp" />
<TextView <TextView
android:id="@+id/tv_handup_image" android:id="@+id/tv_handup_image"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -222,7 +213,17 @@
android:src="@drawable/ic_settings_black_24dp" android:src="@drawable/ic_settings_black_24dp"
android:visibility="gone" /> android:visibility="gone" />
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
<clock.socoolby.com.clock.widget.textview.DigitTextView
android:id="@+id/tv_time"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="#fff"
/>
<clock.socoolby.com.clock.widget.animatorview.AnimatorView <clock.socoolby.com.clock.widget.animatorview.AnimatorView
android:id="@+id/tv_foreground_animatorview" android:id="@+id/tv_foreground_animatorview"
android:layout_width="match_parent" android:layout_width="match_parent"

Binary file not shown.