と思われるでしょうが
6年物のCore2DuoのPCでがんばってる身としては、なるべく軽くて、枯れた環境でやっていたかったのです・・・
ADT 22.6.0(March 2014) Dependencies:
- Java 1.6 or higher is required.
- Eclipse Indigo (Version 3.7.2) or higher is required.
今日からEclipse Keplerでがんばりたいと思います
public static String getTwitterClass(Context context) {
String twitterClass = null;
PackageManager pm = context.getPackageManager();
String packagename = "com.twitter.android";
String class1 = "com.twitter.android.PostActivity";
String class2 = "com.twitter.applib.composer.TextFirstComposerActivity";
String class3 = "com.twitter.android.composer.TextFirstComposerActivity";
try {
ActivityInfo[] activities = pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES).activities;
for(int i = 0; i < activities.length; i++) {
if (activities[i].name.equals(class1)) {
twitterClass = class1;
break;
} else if (activities[i].name.equals(class2)) {
twitterClass = class2;
break;
} else if (activities[i].name.equals(class3)) {
twitterClass = class3;
break;
}
}
} catch (PackageManager.NameNotFoundException e) {
//Twitter is not install
}
return twitterClass ;
}
※Twitter バージョン5.8.0対応 public static void tweetFile1(Context context, String message) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, message);
((Activity)context).startActivity(intent);
}
public static void tweetFile2(Context context, String message) {
String twitterClass = "com.twitter.android.composer.TextFirstComposerActivity";
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.setClassName("com.twitter.android", twitterClass);
((Activity)context).startActivity(intent);
} catch (PackageManager.NameNotFoundException e) {
//Toast("Not found com.twitter.android")
}
}
public static void tweetFile3(Context context, String message) {
String url = "twitter://post?message=" + message;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("text/plain");
intent.setData(Uri.parse(url));
((Activity)context).startActivity(intent);
}
public static void tweetFile4(Context context, String message) {
String url = "http://twitter.com/share?text=" + message;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setType("text/plain");
intent.setData(Uri.parse(url));
((Activity)context).startActivity(intent);
}
| 投稿方法 | 互換 クライ アント | 画像 投稿 | 備 考 |
|---|---|---|---|
| 1.暗黙的Intent | ○ | ○ | Twitter関連アプリ以外もでる |
| 2.Package指定 | × | ○ | 公式Twitterクライアントのみでる |
| 3.URIスキーム指定 | △ | × | 互換クライアントはスキーム対応アプリのみ |
| 4.URL(HTTP)指定 | × | × | 公式クライアントがなくてもブラウザで投稿できる |
Paint paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2f);
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setPathEffect(new DashPathEffect(new float[]{ 2.0f, 2.0f }, 0));
canvas.drawLine(100, 100, 100, 200, paint);
int time; //残り時間 int rect; //ゲージの大きさのRect Bitmap gauge; //フルゲージ画像 Path clip = new Path(); clip.moveTo(rect.centerX(), rect.centerY()); clip.addArc(rect, 267 + ((60 - time) * 6), 360 - ((60 - time) * 6)); clip.lineTo(rect.centerX(), rect.centerY()); canvas.save(); canvas.clipPath(clip); gauge.draw(canvas); canvas.restore();このブログで以前、SurfaceViewで描画範囲を限定するでやった方法と同じですね
| カテゴリ名 | 備考 | カテゴリ名 | 備考 |
|---|---|---|---|
| アクション | パズル | ||
| アドベンチャー | ファミリー | ||
| アーケード | ボード | ||
| ウィジェット | 新カテゴリ | ライブ壁紙 | 新カテゴリ |
| カジノ | レース | ||
| カジュアル | ロールプレイング | ||
| カード | 教育 | 新カテゴリ | |
| シミュレーション | 言葉 | ||
| ストラテジー | 雑学 | 旧トリビア | |
| スポーツ | 音楽 |
Rect area = new Rect(100, 100, 400, 300); Random random =new Random(); int x = area.left + random.nextInt(area.width()); int y = area.top + random.nextInt(area.height());試しに1000個ほど生成して描画してみましょう
Rect area = new Rect(100, 100, 400, 300);
canvas.drawRect(area, paint);
Random random =new Random();
for (int i = 0; i < 1000; i++) {
int x = area.left + random.nextInt(area.width());
int y = area.top + random.nextInt(area.height());
canvas.drawCircle(x, y, 3f, paint);
}
なんかRandom random =new Random();
Plot ring = new Plot(7500, 1882);
for (int i = 0; i < 1000; i++) {
//リングX座標+フリースローラインまでの距離(4.118m)+フリースローラインからスリーポイントラインの間(2.52m)の間のランダム値
Plot base = new Plot(ring.x + 4118 + ((2520 * random.nextInt(100)) / 100), ring.y);
//削った10度+配置部分160°のランダム値
int angle = 10 + random.nextInt(160);
//回転処理
Plot pos = Utl.rotate(angle, ring, base);
//描画座標変換
pos = Court.getDPlot(pos);
canvas.drawCircle(pos.x, pos.y, 3f, paint);
}
試しに1000個ほど生成して描画public void shot(double speed, double vangle, double hangle)//リングとの衝突判定関数
public static Plot hitRing(Plot prev, Plot move) {
Plot ret = null;
//大雑把な判定条件として落下方向への移動、移動のZ座標がリング高さをまたがっている
if (move.z < prev.z && move.z - Ball.R <= RING_H && prev.z - (Ball.R / 2) > RING_H) {
int r = (int)((((prev.z - Ball.R) - RING_H) * 100) / (prev.z - move.z));
//ボール下面がリング高さに来る位置取得
Plot pos = Utl.getPlotInLine(r, prev, move);
//リング中央との距離取得
int d = Utl.getDistancePtoP(RING_CENTER, new Plot(pos.x, pos.y));
//リングに当たりそうな距離にあればさらに詳しく判定
if (d > (RING_R - Ball.R) && d <= RING_R + Ball.R) {
float dagl = Utl.getRadians(Court.RING_CENTER, pos);
int dx = (int)(Court.RING_CENTER.x + Court.RING_R * (Math.cos(dagl)));
int dy = (int)(Court.RING_CENTER.y + Court.RING_R * (Math.sin(dagl)));
int bw = Utl.getDistancePtoP(new Plot(dx, dy), new Plot(pos.x, pos.y));
int bz = (int)(Ball.R * Math.sin(Math.acos((double)(Ball.R - bw) / (double)Ball.R)));
r = (int)(((prev.z - (pos.z - bz)) * 100) / (prev.z - move.z));
//実際にリングに当たる位置取得
pos = Utl.getPlotInLine(r, prev, move);
//リング中央との距離取得
d = Utl.getDistancePtoP(Court.RING_CENTER, new Plot(pos.x, pos.y));
//取得した距離からリングに当たるかどうか判定
if (d > (Court.RING_R - Ball.R) && d <= Court.RING_R + Ball.R) {
ret = new Plot(pos);
}
}
}
return ret;
}
こんな感じPlot hr = hitRing(prev, move);
if (hr != null) {
//法線ベクトル取得
float angle = Utl.getRadians(Court.RING_CENTER, hr);
int dx = (int)(Court.RING_CENTER.x + Court.RING_R * (Math.cos(angle)));
int dy = (int)(Court.RING_CENTER.y + Court.RING_R * (Math.sin(angle)));
//衝突時の速度ベクトルと法線ベクトルの内積を計算
float ip = Utl.getInnerProduct(new Plot(xSpeed, ySpeed, zSpeed), new Plot(hr.x - dx, hr.y - dy, hr.z - Court.RING_H));
//内積が+のときは裏からの当たりなので処理しない
if (ip < 0) {
//速度ベクトルの跳ね返り後の速度を取得
Plot dv = getReflect(new Plot(xSpeed, ySpeed, zSpeed), new Plot(hr.x - dx, hr.y - dy, hr.z - Court.RING_H));
float dk = 0.6f;
//反発係数dkを速度にかける
xSpeed = (int)(dv.x * dk);
ySpeed = (int)(dv.y * dk);
zSpeed = (int)(dv.z * dk);
//衝突後の経過時間を計算
int citv = (int)((interval * Utl.getDistancePtoP(hr, move)) / Utl.getDistancePtoP(prev, move));
//移動後の位置を変更速度から再計算
move.x = (int)(hr.x + ((xSpeed * citv) / 1000));
move.y = (int)(hr.y + ((ySpeed * citv) / 1000));
move.z = (int)(hr.z + ((zSpeed * citv) / 1000));
prev = new Plot(hr);
}
}
こんな感じ、いろいろと処理がひどいですが見ないでやってください(良い子はまねしちゃダメ)