<ToggleButton
android:id="@+id/week1"
style="@style/geo_fence_week_btn_2"
android:text="@string/fence_week_1" />
style_custom.xml
<style name="geo_fence_week_btn_2">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginRight">2dp</item>
<item name="android:layout_weight">1</item>
<item name="android:textColor">@color/geo_fence_week_btn_2_textcolor_selector</item>
<item name="android:background">@drawable/geo_fence_week_btn_2_bgcolor_selector</item>
</style>
geo_fence_week_btn_2_bgcolor_selector.xml
<item android:state_checked="true" android:state_pressed="false">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#fffcce01"/>
</shape>
</item>
<item android:state_checked="false" android:state_pressed="false">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ff939393"/>
</shape>
</item>
還不知道要幹嘛
<item android:state_checked="true" android:state_pressed="true">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ffff"/>
</shape>
</item>
<item android:state_checked="false" android:state_pressed="true">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ffff"/>
</shape>
</item>
2014年12月24日 星期三
2014年12月12日 星期五
[Android] 騰訊(QQ)認領簽名APP
不知道為什麼在騰訊上傳的APP竟然還會遺失,還需要認領...真是無言
首先登入你的QQ帳號+password
按他 -> 立即認領
按他 -> 認領
首先登入你的QQ帳號+password
按他 -> 立即認領
按他 -> 在校驗的左邊的Editor上打上你的packeName ->按下校驗
按下 -> 下一步
按下 -> 下載
再來就是:blablabla
上面的文字就是要你去你的cmd(命令提示字元)上執行,首先找到你的Java是安裝在哪邊
大部分如果沒有特別去動的話都會是在C:\Program Files\Java>
然後再進去尋找一下你的jarsigner.exe到底是在哪邊,我的話的完整路徑如下C:\Program Files\Java\jdk1.7.0_71\bin
就先到這個路近下再進行以下操作
jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]
[keystorePath] -> 是你的keystore的位置 加完整的名稱,例如:D:\apkIn\angelcare,keystore
[apkOut] -> 是你app轉成apk的檔案,我的話就暫時都放一起,例如:D:\apkIn\700_CN_2.26.apk
[apkIn] -> 是在騰訊下載下來的未簽名檔案,例如:D:\apkIn\tap_unsign.apk
[alias] -> 是你在app打包的時候會出現的,例如:如下...
再來就可以按下Enter了,再來會要求你輸入keystore的password就算完成了
按下一步...
按下 -> 上傳安裝包
傳完之後就算完成了
[Android] 自己畫折線圖 Canvas
示意圖
如此如此,這般這般
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class LineChart4 extends View {
Paint paintX, paintXMore, paintText, paintLineFill, paintLine;
ArrayList<Integer> randomArray = new ArrayList<Integer>();
public LineChart4(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
for(int i = 0; i < 10; i++){
randomArray.add((int)(Math.random()*500+500));
System.out.println("randomArray...." + randomArray.get(i));
}
setPaintType();
getViewSize();
}
private void setPaintType() {
// TODO Auto-generated method stub
//底線
paintX = new Paint();
paintX.setColor(Color.BLACK);
paintX.setStrokeWidth(4);
//X軸的很多條線
paintXMore = new Paint();
paintXMore.setColor(Color.GRAY);
paintXMore.setStrokeWidth(1);
//字字字字字字
paintText = new Paint();
paintText.setColor(Color.RED);
paintText.setTextSize(70);
//折線圖的塞滿
paintLineFill = new Paint();
paintLineFill.setColor(Color.CYAN);
paintLineFill.setStrokeWidth(4);
paintLineFill.setStyle(Style.FILL);
//折線圖的線
paintLine = new Paint();
paintLine.setColor(Color.RED);
paintLine.setStrokeWidth(10);
paintLine.setStyle(Style.STROKE);
}
private void getViewSize() {
// TODO Auto-generated method stub
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.height = this.getHeight();
layoutParams.width = this.getWidth();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Path path = new Path();
//比例
int scaleSpacing = this.getHeight() / Collections.max(randomArray);
//畫X線
canvas.drawLine(0, this.getHeight() - 50f, this.getWidth(), this.getHeight() - 50f, paintX);
//畫X的很多條線
int drawMoreLineX = 10;
int textSpacing = this.getWidth() / drawMoreLineX;
for(int i = 1; i <= drawMoreLineX; i++)
canvas.drawLine(0, this.getHeight() - ((this.getHeight() / drawMoreLineX) * i), this.getWidth(), this.getHeight() - ((this.getHeight() / drawMoreLineX) * i), paintXMore);
for(int i = 1; i <= drawMoreLineX; i++)
canvas.drawText(String.valueOf(i), textSpacing * i , this.getHeight(), paintText);
//畫線
path.moveTo(0, this.getHeight() - 50f);
for(int i = 0; i < randomArray.size(); i++){
int y = i;
path.lineTo((this.getWidth() / randomArray.size()) * ++y, scaleSpacing * randomArray.get(i));
}path.lineTo(this.getWidth(), this.getHeight() - 50f);
canvas.drawPath(path, paintLine);
canvas.drawPath(path, paintLineFill);
}
}
下載地址:https://drive.google.com/open?id=0B2WSxYpFVHkaOWhsSGlITFJvTW8&authuser=0
參考網址:http://www.cnblogs.com/aibuli/p/950c34f2bc0d02cbd290dd6a8339d42a.html
2014年12月10日 星期三
[Android] 自定義 Dialog
彈出畫面:
heart_rate__calendar.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideInset" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFFFF"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/calendar_month"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="NOV"
android:textColor="#FF33B5E5"
android:textSize="30sp" />
<TextView
android:id="@+id/calendar_day"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:autoText="true"
android:gravity="center"
android:text="37"
android:textColor="#FF33B5E5"
android:textSize="120sp" />
<CalendarView
android:id="@+id/calendarChose"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:accessibilityLiveRegion="assertive"
android:descendantFocusability="blocksDescendants"
android:focusable="true"
android:focusableInTouchMode="true"
android:importantForAccessibility="auto"
android:labelFor="@integer/abc_max_action_buttons"
android:layoutMode="opticalBounds"
android:nextFocusForward="@anim/slide_in_right" />
<Button
android:id="@+id/calendar_done"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FFFFFFFF"
android:text="Done" />
</LinearLayout>
</RelativeLayout>
heart_rate_maina.class
private View dialogViewCalendar, view;
protected AlertDialog dialogCalendar;
private Button btn1;
public class heart_rate_main extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.heart_rate_main, container, false);
btn1 = (Button)view.findViewById(R.id.btn1);
btn.setOnClickListener(btn1_Click);
LayoutInflater factory = LayoutInflater.from(getActivity());
dialogViewCalendar = factory.inflate(R.layout.heart_rate_calendar, null);
dialogCalendar = new AlertDialog.Builder(getActivity()).create();
dialogCalendar.setView(dialogViewCalendar);
return view
}
private String[] MonthEng = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
private void dialogCalendarView(){
((TextView)dialogViewCalendar.findViewById(R.id.calendar_month)).setText(new SimpleDateFormat("MMM", Locale.US).format(new Date().getTime()));
((TextView)dialogViewCalendar.findViewById(R.id.calendar_day)).setText(new SimpleDateFormat("dd").format(new Date().getTime()));
((CalendarView)dialogViewCalendar.findViewById(R.id.calendarChose)).setOnDateChangeListener(new OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month,
int dayOfMonth) {
// TODO Auto-generated method stub
((TextView)dialogViewCalendar.findViewById(R.id.calendar_month)).setText(MonthEng[month]);
((TextView)dialogViewCalendar.findViewById(R.id.calendar_day)).setText(String.valueOf(dayOfMonth));
}
});
((Button)dialogViewCalendar.findViewById(R.id.calendar_done)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Bundle b = new Bundle();
b.putString("year", new SimpleDateFormat("yyyy").format(((CalendarView)dialogViewCalendar.findViewById(R.id.calendarChose)).getDate()));
b.putString("month", ((TextView)dialogViewCalendar.findViewById(R.id.calendar_month)).getText().toString());
b.putString("day", ((TextView)dialogViewCalendar.findViewById(R.id.calendar_day)).getText().toString());
b.putSerializable("heart_rate_detail_list.class", heart_rate_detail_list.class);
changeFragment(new heart_rate_detail_list(), b);
dialogCalendar.dismiss();
}
});
}
private LinearLayout.OnClickListener btn1_Click = new OnClickListener(){
@Override
public void onClick(View v){
dialogCalendar.show();
}
}
參考文獻:http://iamshiao.blogspot.tw/2010/12/androiddialog.html
2014年12月4日 星期四
[Android] 抓現在時間 - 系統時間 - 以毫秒表現 - 抓最小時間 - 毫秒轉日期 - 一行轉制定格式
毫秒方式表現
如果是某一個方法裡要放置的方式
例如說明上寫著:SelectDayRangeDialog(long startTimeMill)
就是要你放置時間的毫秒,就可以以此表示
new Date().getTime()
//抓系統時間
System.currentTimeMillis()
如果是要以變數的方式來取的話
String TimeStamp = String.valueOf(new Date().getTime());
抓最小時間1979
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
Date minTime = cal.getTime();
毫秒轉成日期
long Millis = 1432412345L;
Date date = new Date(Millis);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String endsTimeDate = sdf.format(Millis);
取到毫秒時間一行轉制定日期
new SimpleDateFormat("HH:mm dd/MM/yyyy").format(new Date(data.getTimeMill()))
format 格式
"yyyy-MM-dd HH:mm:ss.SSS 'GMT'Z" = "2014-12-18 11:00:24.513 GMT+0800"
如此一般這般這般.....
如果是某一個方法裡要放置的方式
例如說明上寫著:SelectDayRangeDialog(long startTimeMill)
就是要你放置時間的毫秒,就可以以此表示
new Date().getTime()
//抓系統時間
System.currentTimeMillis()
如果是要以變數的方式來取的話
String TimeStamp = String.valueOf(new Date().getTime());
抓最小時間1979
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
Date minTime = cal.getTime();
毫秒轉成日期
long Millis = 1432412345L;
Date date = new Date(Millis);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String endsTimeDate = sdf.format(Millis);
取到毫秒時間一行轉制定日期
new SimpleDateFormat("HH:mm dd/MM/yyyy").format(new Date(data.getTimeMill()))
format 格式
"yyyy-MM-dd HH:mm:ss.SSS 'GMT'Z" = "2014-12-18 11:00:24.513 GMT+0800"
如此一般這般這般.....
2014年12月3日 星期三
[Android] SHA-256加密
SHA-256 的加密方式,是andorid裡面自己就有先寫好的一個方法,但是就是要去呼叫來做執行,他是此方法不能反編譯,所以你如果想驗證自己加密的東西是否是對方想要的,就只能找另一個人做編譯來確認。
public String getDataHash(String Gkey,String AppDataJson){
//得到毫秒数
Date curDate = new Date();
TimeStamp = String.valueOf(curDate.getTime());
String dataStructure = Gkey + TimeStamp + AppDataJson;
MessageDigest shaCode = null;
try {
shaCode = MessageDigest.getInstance("SHA-256");
shaCode.update(dataStructure.getBytes());
System.out.println("dataStructure="+dataStructure);
}
catch(Exception e) {
e.printStackTrace();
return "";
}
return byte2Hex(shaCode.digest());
}
private static String byte2Hex(byte[] data) {
String hexString = "";
String stmp = "";
for(int i = 0; i < data.length; i++) {
stmp = Integer.toHexString(data[i] & 0XFF);
if(stmp.length() == 1) {
hexString = hexString + "0" + stmp;
}
else {
hexString = hexString + stmp;
}
}
return hexString.toUpperCase();
}
public String getDataHash(String Gkey,String AppDataJson){
//得到毫秒数
Date curDate = new Date();
TimeStamp = String.valueOf(curDate.getTime());
String dataStructure = Gkey + TimeStamp + AppDataJson;
MessageDigest shaCode = null;
try {
shaCode = MessageDigest.getInstance("SHA-256");
shaCode.update(dataStructure.getBytes());
System.out.println("dataStructure="+dataStructure);
}
catch(Exception e) {
e.printStackTrace();
return "";
}
return byte2Hex(shaCode.digest());
}
private static String byte2Hex(byte[] data) {
String hexString = "";
String stmp = "";
for(int i = 0; i < data.length; i++) {
stmp = Integer.toHexString(data[i] & 0XFF);
if(stmp.length() == 1) {
hexString = hexString + "0" + stmp;
}
else {
hexString = hexString + stmp;
}
}
return hexString.toUpperCase();
}
訂閱:
文章 (Atom)