2014年12月24日 星期三

[Android] 在XML設計點擊效果

            <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月23日 星期二

2014年12月12日 星期五

[Android] 騰訊(QQ)認領簽名APP

不知道為什麼在騰訊上傳的APP竟然還會遺失,還需要認領...真是無言

首先登入你的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"


如此一般這般這般.....

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();
}