山寨之旅[一]山寨Funambol UI一点点

代码图片布局创意等等所有的一切都归原创者所有
我已经分不清谁是原创
如要用于商业,请遵守相关法则

主要的代码就是SyncStatusPanel.java
山寨的还不够干净利落,有些代码可能无用
package org.xkit.android.demo;

import android.app.Activity;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

@SuppressWarnings("unused")
public class SyncStatusPanel extends RelativeLayout {
private class SetIconUIThread implements Runnable {

private int image;

public SetIconUIThread() {
}

public void run() {
if (image != 0) {
sourceIconView.setImageResource(image);
} else {
sourceIconView.setImageResource(0);
}
}

public void setIcon(int image) {
this.image = image;
}
}

private class SetStatusIconUIThread implements Runnable {
private int image;

public SetStatusIconUIThread() {
}

public void run() {
if (image != 0) {
statusIconView.setImageResource(image);
} else {
statusIconView.setImageResource(0);
}
}

public void setIcon(int image) {
this.image = image;
}
}

private class SetStatusStringUIThread implements Runnable {
private String text;

public SetStatusStringUIThread() {
}

public void run() {
statusTextView.setText(text);
}

public void setText(String value) {
this.text = value;
}
}

private class SetTitleUIThread implements Runnable {
private String title;

public SetTitleUIThread() {
}

public void run() {
titleTextView.setText(title);
}

public void setTitle(String title) {
this.title = title;
}
}

protected static final int BOTTOM_PADDING = 8;

private static final int DISABLED_TEXT_COLOR = 0xFF7F7F7F;

private static final int ENABLED_TEXT_COLOR = 0xFF000000;

protected static final int SOURCE_ICON_LEFT_PADDING = 4;

protected static final int SOURCE_ICON_RIGHT_PADDING = 4;

private static final int STATUS_FONT_SIZE = 12;
protected static final int STATUS_ICON_R_PADDING = 4;

protected static final int STATUS_L_PADDING = 12;
private static final int TITLE_FONT_SIZE = 20;

protected static final int TITLE_L_PADDING = 5;
protected static final int TOP_PADDING = 8;

protected Activity activity;

protected SetIconUIThread setIconUIThread = new SetIconUIThread();
protected SetStatusIconUIThread setStatusIconUIThread = new SetStatusIconUIThread();
protected SetStatusStringUIThread setStatusStringUIThread = new SetStatusStringUIThread();
protected SetTitleUIThread setTitleUIThread = new SetTitleUIThread();

protected ImageView sourceIconView;
protected ImageView statusIconView;
protected TextView statusTextView;
protected TextView titleTextView;

// 每个元素的ID
protected final int D1 = 0X514001, D2 = 0X514002, D3 = 0X514003,
D4 = 0X514004;

public SyncStatusPanel(Activity activity) {
super(activity);
this.activity = activity;
statusIconView = createStatusIcon(activity);
sourceIconView = createSourceIcon(activity);
titleTextView = createTitleText(activity);
statusTextView = createStatusText(activity);

RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.CENTER_VERTICAL);
params1.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

addView(sourceIconView, params1);

RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);

params2.addRule(RelativeLayout.CENTER_VERTICAL);
params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

addView(statusIconView, params2);

RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
params3
.addRule(RelativeLayout.RIGHT_OF,
sourceIconView.getId());
params3.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params3.addRule(RelativeLayout.LEFT_OF, statusIconView.getId());
addView(titleTextView, params3);

RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
params4
.addRule(RelativeLayout.RIGHT_OF,
sourceIconView.getId());
params4.addRule(RelativeLayout.BELOW, titleTextView.getId());
params4.addRule(RelativeLayout.LEFT_OF, statusIconView.getId());
addView(statusTextView, params4);

setBackgroundResource(R.drawable.sync_status_panel);
}

protected int adaptSizeToDensity(int size) {
return (int) (size * getContext().getResources()
.getDisplayMetrics().density);
}

protected ImageView createSourceIcon(Activity activity) {
ImageView sourceIconView = new ImageView(activity);
sourceIconView.setPadding(
adaptSizeToDensity(SOURCE_ICON_LEFT_PADDING),
adaptSizeToDensity(TOP_PADDING),
adaptSizeToDensity(SOURCE_ICON_RIGHT_PADDING),
adaptSizeToDensity(BOTTOM_PADDING));
sourceIconView.setId(D1);
return sourceIconView;
}

protected ImageView createStatusIcon(Activity activity) {
ImageView statusIconView = new ImageView(activity);
statusIconView.setAdjustViewBounds(true);
statusIconView.setMaxHeight(adaptSizeToDensity(32));
statusIconView.setMaxWidth(adaptSizeToDensity(32));
statusIconView.setId(D2);
return statusIconView;
}

protected TextView createStatusText(Activity activity) {
TextView statusTextView = new TextView(activity);
statusTextView.setPadding(adaptSizeToDensity(STATUS_L_PADDING),
0, 0, 0);
statusTextView.setTextSize(STATUS_FONT_SIZE);
statusTextView.setTextColor(ENABLED_TEXT_COLOR);
statusTextView.setBackgroundColor(android.R.color.black);
statusTextView.setId(D3);
return statusTextView;
}

protected TextView createTitleText(Activity activity) {
TextView titleTextView = new TextView(activity);

titleTextView.setTextSize(TITLE_FONT_SIZE);
titleTextView.setPadding(adaptSizeToDensity(TITLE_L_PADDING),
adaptSizeToDensity(TOP_PADDING), 0, 0);
titleTextView.setTextColor(ENABLED_TEXT_COLOR); // COLOR

titleTextView.setId(D4);
return titleTextView;
}

public void setIcon(int image) {
setIconUIThread.setIcon(image);
activity.runOnUiThread(setIconUIThread);
}

public void setStatusIcon(int image) {
setStatusIconUIThread.setIcon(image);
activity.runOnUiThread(setStatusIconUIThread);
}

public void setStatusString(String value) {
setStatusStringUIThread.setText(value);
activity.runOnUiThread(setStatusStringUIThread);
}

public void setTitle(String value) {
setTitleUIThread.setTitle(value);
activity.runOnUiThread(setTitleUIThread);
}
}

这个类代码很少,但是还是可以学到些基本知识

比如为什么要用Runnable来更新UI

adaptSizeToDensity方法的目的

用XML来定义背景图形

RelativeLayout基本知识

等等等等

调用方法如下:
		LinearLayout lll = (LinearLayout) findViewById(R.id.boxes);

LinearLayout.LayoutParams ll1Params = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);

SyncStatusPanel ssp = new SyncStatusPanel(this); // 这个是我们自定义的

ssp.setIcon(R.drawable.icon_calendar);
ssp.setTitle("日程安排");
ssp.setStatusString("上次同步在 2010-01-01 12:23:32");
ssp.setStatusIcon(R.drawable.icon_complete);

lll.addView(ssp, ll1Params);


直接上图
山寨:
[img]http://dl.iteye.com/upload/attachment/408777/63157d84-4c78-3872-9dda-68752a5001c2.png[/img]

原图:
https://android-client.forge.funambol.org/
[img]https://android-client.forge.funambol.org/cn-project-pages/images/home.png[/img]

估计我这直接叫抄袭吧,姑且叫它学习
【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink仿真实现)内容概要:本文档是份关于“光伏并网逆变器扫频与稳定性分析”的Simulink仿真实现资源,重点复现博士论文中的阻抗建模与扫频法验证过程,涵盖锁相环和电流环等关键控制环节。通过构建详细的逆变器模型,采用小信号扰动方法进行频域扫描,获取系统输出阻抗特性,并结合奈奎斯特稳定判据分析并网系统的稳定性,帮助深入理解光伏发电系统在弱电网条件下的动态行为与失稳机理。; 适合人群:具备电力电子、自动控制理论基础,熟悉Simulink仿真环境,从事新能源发电、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握光伏并网逆变器的阻抗建模方法;②学习基于扫频法的系统稳定性分析流程;③复现高水平学术论文中的关键技术环节,支撑科研项目或学位论文工作;④为实际工程中并网逆变器的稳定性问题提供仿真分析手段。; 阅读建议:建议读者结合相关理论教材与原始论文,逐步运行并调试提供的Simulink模型,重点关注锁相环与电流控制器参数对系统阻抗特性的影响,通过改变电网强度等条件观察系统稳定性变化,深化对阻抗分析法的理解与应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值