精华内容
下载资源
问答
  • 而将手机合上之后,Pro1看起来似乎与其它安卓手机没有太大的区别,5.99英寸的AMOLED曲面屏幕,额头和下巴虽然不是特别窄,但其实还算说得过去,尤其是等宽设计也让横屏看起来更加和谐。 不过由于加入了实体键盘,...
    cb4fc85792dad3fe88f5714f13b0f199.png

    在诺基亚十代,手机的形态可谓是百花齐放,各种造型的手机,尤其是诺基亚N950这样的侧滑全键盘手机,更是让还在上学的笔者心神向往。

    然而当笔者已经有能力入手自己人生第一部手机的时候,已经是智能手机的天下,清一色的直板智能手机,而且手机的同质化越来越严重,让笔者这个数码爱好者已经对各种新机失去了兴趣。

    ced16e38aa72ba4b34bf4303efdf9031.png

    不过近日笔者发现了一款有点不一样的手机,那就是Fxtec Pro1。

    b35f3fad97dfdb505712404f9937c969.gif

    不卖关子,这款Pro1最大的特点就是配备了一个侧滑全键盘,通过向一侧滑动屏幕,“咔哒”一声,手机就会呈现它的键盘形态。侧滑过程中,会伴随有明显的段落感。

    f5f24570b282709c43388ebb90e62a6c.png

    由于特殊的铰链结构,屏幕并不是平行移动的,而是会与键盘形成155°角度。

    14c78f51f79a73e0b52e1450bd635a99.png

    键盘也都是实体按键,共64个按键,包括了Ctrl、Shift、Caps、Esc、Del、方向键等电脑键盘上会见到的按键,包括Ctrl + C和Ctrl + V这样的快捷键也都进行了还原。另外,键盘按键也都配有背光。

    9968dfe0a2e5cdf8683859a196e3fece.png

    由于实体键盘不会像虚拟键盘那样占用桌面空间,所以如果是查看邮件或文档,更大的屏幕也会展示更多的内容。

    除了能实现输入文字外,手机还允许自定义快捷方式,可通过按键快速启动某个APP。

    04f508855dedca112c6ef3ef1961df37.png

    而将手机合上之后,Pro1看起来似乎与其它安卓手机没有太大的区别,5.99英寸的AMOLED曲面屏幕,额头和下巴虽然不是特别窄,但其实还算说得过去,尤其是等宽设计也让横屏看起来更加和谐。

    553c3c748572d65c76a19539c3b8aa13.png

    不过由于加入了实体键盘,所以Pro1的厚度还是不可避免的来到了13.98毫米,重量也达到了243克(这是要继承索尼手机的衣钵?)。

    0da4f1e2b5ff784ad05547454e0f3844.png

    Pro1将实体指纹设计在了侧面,不过并没有做成电源+实体指纹二合一的形式,值得一提的是,侧面还增加了一枚拍照键。

    处理器和存储方面,Pro1搭载的是高通骁龙835处理器,6GB运存,考虑到F(x)tec是2018年创立的,使用骁龙835处理器也是情理之中,而且835这个处理器放到现在也还算够用。

    bef8b1537f14859f2dbb59fdde01f582.png

    后置双摄,12MP(Sony IMX363),f / 1.8,1.4μm像素+ 5MP,定焦,f / 2.0。

    8736eda546012fed039e96fad6976469.png

    值得一提的是,作为一款小众机型,Pro1也充分考虑到了小众用户刷机的需要,因此Bootloader可以自由解锁,并且支持刷入Lineage OS和Sailfish系统。

    dcda02b38dba7e68a4c66356179ea73b.png

    目前F(x)tec官网已经支持预定,售价729.00 美元,约合人民币4788元。

    42982d18455b40fe55c99c360634437e.png

    另外,F(x)tec还在indiegogo众筹网站上推出了一款Pro1 X新机,增加了Ubuntu的支持,并可以通过数据线连接显示器化身PC桌面模式。

    (图侵删)

    展开全文
  • 安卓webApp模板

    千次阅读 2019-02-03 22:44:05
    安卓webApp开发模板 最近团队需要做一个安卓app,使用原生的android开发的话,开发周期会比较...同时这里采用了快捷菜单来设置请求的URL,预计效果如下(安卓系统得在7.1以上才支持): 总的来说这样的开发门槛...

    安卓webApp开发模板

    最近团队需要做一个安卓app,使用原生的android开发的话,开发周期会比较长,考虑到时间因素团队成员考虑采用webapp的形式来开发,这样门槛会相对来说也会低一些。

    开发工具:

    • Android Studio

    具体思路如下:

    同时这里采用了快捷菜单来设置请求的URL,预计效果如下(安卓系统得在7.1以上才支持):

    总的来说这样的开发门槛很低,对于零基础的安卓开发人员也很容易上手,具体的代码也不难,主要是安卓的布局是xml格式的,对于习惯了html的朋友来说,初始会感到不习惯。

    接下来我们聊一下具体的代码实现细节:

    整体项目层次结构如下:

     

    配置文件:AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.mywebviewapp" android:versionCode="1"
        android:versionName="1.0">
    ​
        <uses-permission android:name="android.permission.INTERNET" />
    ​
        <application
            android:allowBackup="true"
            android:networkSecurityConfig="@xml/network_security_config"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    ​
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <!--add static shortcut注意把这个都加到主页面上,至于下面这个类 我们在xml/static_shortcut下面已经配置了/-->
                <meta-data android:name="android.app.shortcuts"
                    android:resource="@xml/static_shortcut" />
            </activity>
            <!--  注意这里有结果active就得注册几个,不注册的话 如果要跳转到该active则会出现闪退现象 -->
        <activity android:name=".WebSettingActivity">
        </activity>
        </application>
    ​
    </manifest>

    请注意:

    使用webview一定要给联网权限

    <uses-permission android:name="android.permission.INTERNET" />

    配置静态快捷菜单

    <!--add static shortcut注意把这个都加到主页面上,至于下面这个类 我们在xml/static_shortcut下面已经配置了/-->
    <meta-data android:name="android.app.shortcuts"
        android:resource="@xml/static_shortcut" />

    静态快捷键菜单配置文件xml/static_shortcut.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
        <!--设置UrL-->
        <shortcut
            android:enabled="true"
            android:icon="@drawable/ic_shortcut_search"
            android:shortcutDisabledMessage="@string/lable_shortcut_static_search_disable"
            android:shortcutId="shortcut_id_search"
            android:shortcutLongLabel="@string/lable_shortcut_static_search_long"
            android:shortcutShortLabel="@string/lable_shortcut_static_search_short">
            <intent
                android:action="android.intent.action.VIEW"
                android:targetClass="com.example.mywebviewapp.WebSettingActivity"
                android:targetPackage="com.example.mywebviewapp" />
            <!--当前只有这个分类-->
            <categories android:name="android.shortcut.conversation" />
        </shortcut>
    </shortcuts>

    主布局页:activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    ​
    ​
    ​
        <WebView
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="false"
            android:layout_centerHorizontal="true"
            android:layout_marginHorizontal="8dp" />
    ​
    </LinearLayout>
    

    设置请求URL:activity_web_setting.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="16dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="16dp"
        tools:context=".WebSettingActivity" >
    ​
        <Button
            android:id="@+id/btnCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:onClick="myClickBtnBack"
            android:text="返回" />
    ​
        <Button
            android:id="@+id/btnSave"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/btnCancel"
            android:layout_alignBottom="@+id/btnCancel"
            android:layout_alignParentRight="true"
            android:onClick="myClickBtnSave"
            android:text="保存" />
    ​
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/btnCancel"
            android:layout_below="@+id/btnCancel"
            android:layout_marginTop="29dp"
            android:text="Url:"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    ​
        <EditText
            android:id="@+id/txtUrl"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView1"
            android:layout_alignBottom="@+id/textView1"
            android:layout_alignRight="@+id/btnSave"
            android:layout_toRightOf="@+id/textView1"
            android:ems="10" >
    ​
            <requestFocus />
        </EditText>
    </RelativeLayout>

    主入口类:MainActivity.class:

    package com.example.mywebviewapp;
    ​
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Toast;
    ​
    import java.util.concurrent.ExecutionException;
    ​
    public class MainActivity extends Activity {
    ​
        private WebView webView;
        private ProgressDialog progressBar;
    ​
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    ​
    ​
            //获取webview
            webView = (WebView) findViewById(R.id.webView1);
    ​
            // 获取触摸焦点
            webView.requestFocus();
            //设置webview禁止缓存  方便调试
            webView.getSettings().setCacheMode(webView.getSettings().LOAD_NO_CACHE);
            // 取消滚动条
            webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
            // 构建缩放控制
            webView.getSettings().setBuiltInZoomControls(false);
            // 设置支持缩放
            webView.getSettings().setSupportZoom(false);
    ​
            //设置webview支持JS
            webView.getSettings().setJavaScriptEnabled(true);
            /*
             * 用webview打开指定网页
             * 网址取保存在SharedPreferences的参数
             */
            progressBar = new ProgressDialog(this);
            progressBar.setMessage("正在加载中......");
            progressBar.setCancelable(true);
    ​
            webView.setWebViewClient(
                    new WebViewClient() {
                        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                            view.loadUrl(url);
                            return true;
                        }
    ​
                        //等待进度条
                        public void onPageStarted(WebView view, String url, Bitmap favicon) {
                            //Log.i(TAG, "Started loading URL: " +url);
                            //progressBar = ProgressDialog.show(MainActivity.this, "title", "message",true);
                            progressBar.show();
                        }
    ​
                        public void onPageFinished(WebView view, String url) {
                            //Log.i(TAG, "Finished loading URL: " +url);
                            if (progressBar.isShowing()) {
                                progressBar.dismiss();
                            }
                        }
                    });
    ​
    ​
            SharedPreferences userInfo = getSharedPreferences("user_info", 0);
            if (userInfo.getString("url", "").toString().equals("")) {
                //页面跳转至WebSettingActivity
                Intent intent = new Intent(MainActivity.this, WebSettingActivity.class);
                startActivity(intent);
                return;
            }
            try {
                if (!new Connection().execute(userInfo.getString("url", "").toString()).get()) {
                    linkWebSettingActive();
                    return;
                }
            } catch (ExecutionException e) {
                linkWebSettingActive();
                e.printStackTrace();
            } catch (InterruptedException e) {
                linkWebSettingActive();
                e.printStackTrace();
            }
    ​
            //布局中设置的方向是horizontal,设置成LayoutParams(0,heignt,weight) 即width需要设置权重就在width处为0
            //布局中设置的方向是vertical,设置成LayoutParams(width,0,weight) 即heignt需要设置权重就在heignt处为0
            //webView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            try {
                webView.loadUrl(userInfo.getString("url", "").toString());
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    ​
    ​
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            return false;
        }
    ​
        private void linkWebSettingActive() {
            //构建一个Toast,相当于网页的alert。  makeText(Context 上下文对象,String字符串,显示延迟的时间);
            Intent intent = new Intent(MainActivity.this, WebSettingActivity.class);
            startActivity(intent);
            Toast ts = Toast.makeText(MainActivity.this, "当前请求链接不可达,请重新输入新的请求链接!", Toast.LENGTH_LONG);
            ts.show();
        }
    }

    由于安卓默认在主线程内不允许发生其他请求(会提示NetworkOnMainThreadException),所以要想检查URL是否可用,我们需要异步非阻塞的方式来进行,这样我们的安卓app响应也会更快。

    增加一个connection.class:

    package com.example.mywebviewapp;
    ​
    import android.os.AsyncTask;
    ​
    import java.net.HttpURLConnection;
    import java.net.URL;
    ​
    import javax.net.ssl.HttpsURLConnection;
    ​
    public class Connection extends AsyncTask<String, Boolean, Boolean> {
    ​
        private boolean checkUrlIsAvailable(String urlStr) {
            try {
                HttpsURLConnection httpsCon=null;
                HttpURLConnection httpCon=null;
                URL url = new URL(urlStr);
                if(urlStr.contains("https"))
                {
                    httpsCon = (HttpsURLConnection) url.openConnection();
                    int code = httpsCon.getResponseCode();
                    if (code != 200) {
                        httpsCon.disconnect();
                        return false;
                    }
                    httpsCon.disconnect();
                }
                else
                {
                    httpCon = (HttpURLConnection) url.openConnection();
                    int code = httpCon.getResponseCode();
                    if (code != 200) {
                        httpCon.disconnect();
                        return false;
                    }
                    httpCon.disconnect();
                }
    ​
    ​
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
    ​
    ​
        @Override
        protected Boolean doInBackground(String... urls) {
            return checkUrlIsAvailable(urls[0]);
        }
    }

    设置动态链接:WebSettingActivity.class

    package com.example.mywebviewapp;
    ​
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.view.View;
    import android.widget.EditText;
    ​
    public class WebSettingActivity extends Activity {
    ​
        private EditText txtUrl = null;
    ​
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_web_setting);
    ​
            txtUrl = (EditText) findViewById(R.id.txtUrl);
            SharedPreferences userInfo = getSharedPreferences("user_info", 0);
            txtUrl.setText(userInfo.getString("url", ""));
        }
    ​
        /*
         * 保存按钮事件
         */
        public void myClickBtnSave(View v) {
            /*
             * 将表单结果保存到SharedPreferences中
             */
            SharedPreferences userInfo = getSharedPreferences("user_info", 0);
            userInfo.edit().putString("url", txtUrl.getText().toString()).commit();
    ​
            Intent intent = new Intent(WebSettingActivity.this, MainActivity.class);
            startActivity(intent);
        }
    ​
        /*
         * 返回按钮事件
         */
        public void myClickBtnBack(View v) {
            finish();     //只是推向后台
        }
    }

    解决http链接默认不能访问的问题network_security_config.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <!--Set application-wide security config using base-config tag.-->
        <base-config cleartextTrafficPermitted="true"/>
    </network-security-config>

    这里我用的安卓模拟器是:夜神模拟器,为什么使用它呢,主要是觉得android studio中的模拟器太重(当然这是个人拙见),另外如果可以的话,我们可以直接在真机上来debug我们的webapp,这需要开启设备的【USB调试】,不同设备的开启方式不同。

    具体调试方式可以参考:谷歌远程调试的文档(可能需要翻墙)

    参考文章:

    安卓的快捷菜单

    App Shortcuts的官方文档: App Shortcuts

    Exploring Android Nougat 7.1 App Shortcuts

    展开全文
  • 我发布了将默认/主要活动更改为YActivity.java的更新我发现该应用程序可以从应用程序菜单中正常打开,但是当我尝试从主屏幕快捷方式启动时,它抛出一个错误,提示"未安装应用程序"我知道,由于删除旧X...

    仅供参考:我已经浏览了这些链接

    Android上的应用未安装错误

    我尝试自动更新时未安装应用程序

    我的问题没什么不同。

    我在版本1.0中将具有默认/主要活动的应用程序发布为XActiivity.java。

    我发布了将默认/主要活动更改为YActivity.java的更新

    我发现该应用程序可以从应用程序菜单中正常打开,但是当我尝试从主屏幕快捷方式启动时,它抛出一个错误,提示"未安装应用程序"

    我知道,由于删除旧XActivity.java的快捷方式,可以解决此问题,但是如果我以成千上万的更新发布应用程序,并且已经拥有该应用程序,则在此错误消息的第一个实例时会感到恼火。 我会因为获得好评而松口气

    尝试删除该图标并创建一个新的快捷方式。

    这是因为主屏幕快捷方式的工作方式与某些启动器中的启动器图标略有不同。

    当您将其更新为YActiivity时,旧的快捷方式仍包含对XActiivity的引用作为主要的Activity。这会导致Android认为该应用未安装,因为它无法在您的应用中找到标记为MAIN Activity的XActiivity。

    只需删除主屏幕图标并将其重新添加即可解决此问题。

    谢谢,是的,我同意/知道您的解决方案,但是,如果我发布成千上万的更新,它将影响到每个更新,因此它们可能会遇到相同的问题。

    @Shri不幸的是,除了不更改启动器类名称外,您无能为力。一些发射器甚至没有这个问题,但是相当多。这只是您无法控制的事情之一。

    任何人都可以确定哪些发射器有此问题。我希望能够重现这一点。

    我在考虑一个Android问题,但这只是一个活动名称更新,例如一个愚蠢的错字;)

    在Manifest.XML内部的特定活动中帮了我忙。

    这与此问题无关。文档说,快捷方式的活动必须是启动器,并且必须是操作主体。 (doc developer.android.com/guide/topics/ui/shortcuts)

    请检查是否在应该为"android.intent.category.LAUNCHER"的活动上具有属性android:exported="false"。这使特定活动无法在启动器上启动。

    这个问题很旧,但是今天仍然有用。

    发生这种情况是因为我更改了启动活动。我原来有这个(被截断):

    android:name=".activities.OtherActivity"

    android:exported="false" />

    添加了意图过滤器后,我删除了StartActivity,但忘记删除了android:exported =" false"。它看起来像这样:

    android:name=".activities.OtherActivity"

    android:exported="false">

    简而言之,请确保您的开始活动已导出。

    可能是一种情况,请检查您的代码以了解" Intent.EXTRA_SHORTCUT_INTENT被映射到LAUNCHER活动。 (可能是SplashScreenActivity)

    一分钟前,我遇到了同样的问题。

    我不是专家,所以我只能从所有答案中得到的问题是启动器在主屏幕上创建的快捷方式。

    我正在使用没有应用程序抽屉的经典极简启动器,因此所有应用程序都在主屏幕上,因此我不能仅删除快捷方式而不将其卸载。

    因此,我清除了启动器的缓存,它自行为该应用程序创建了新的快捷方式,并开始工作。

    "未安装应用程序"错误的可能解决方案

    重新启动手机:在这种情况下,第一件事就是重新启动

    你的设备。或者只是关机,取出并重新插入电池。

    确保卸载所有不需要的应用以释放空间,并且

    卸载当前安装在同一应用程序的早期版本

    你的设备。

    仔细检查您下载的apk文件,并确保它们是

    完全复制或下载。

    尝试通过转到设置>应用>所有>菜单键来重置应用权限

    Reset application permissions or Reset app preferences.

    将应用程序安装位置更改为"自动"或"由系统决定"。

    确保未安装SD卡或未将其连接到PC或

    别处。

    在最坏的情况下,格式化SD卡-复制其中的内容

    其他地方进行备份和格式化。

    最后的解决方案是彻底擦除设备。或者通过

    在"设置"下进行恢复出厂设置或完全擦除

    恢复模式。

    参考

    首先确保当前安装的应用程序是否可以移动到SD卡

    如果不能,那是你有原因

    在生根的时候我的htc愿望300我在bootloop中刷错了rom

    从商店修理了它

    现在运行自定义rom我不知道哪个

    但它不支持将应用程序移动到SD卡

    所以我将应用程序复制到手机内存中

    卸下或卸下的SD卡

    然后我尝试从手机内存安装,并且现在安装了fs2014 1.35

    horrray

    希望对你有帮助

    这仅在您具有自定义rom的情况下有效,因为原始rom不会出现此类错误

    或者你称那是一个错误

    是的,但是仅当在应用程序包安装过程中未安装应用程序时,该方法才有效

    我写的解决方案是。

    AndroidManfest.xml

    我为先前的XActivity.java保留了意图过滤器android.intent.action.MAIN。

    我还保留了意图过滤器android.intent.action.MAIN,还对YActivity.java将其分类为LAUNCHER

    在XActivity.java的onCreate()方法中,我添加了以下几行,看来已经解决了问题

    Intent thisIntent = getIntent();

    if(thisIntent.getAction() =="android.intent.action.MAIN"){

    Intent intent = new Intent(this,YActivity.class);

    startActivity(intent);

    finish();

    }

    嗨-我正在尝试您的解决方案,但是很遗憾,这确实很难测试。您能否解释一下如何解决此问题,因为如果问题出在快捷方式中,而启动器活动嵌入其详细信息中,则该快捷方式存在问题,那么我不确定该如何解决。请详细说明。谢谢!

    如果在应用程序中同时实现XActivity和YActivity作为入口点怎么办? XActivity可以删除其启动器快捷方式,安装YActivity快捷方式,然后启动YActivity。

    展开全文
  • 安卓开发自定义View

    2017-02-15 19:33:01
    1.自定义View 虽然Android提供了很多继承了View类的UI组件,但是在实际开发时,还会出现不足以满足程序需要的情况。这时用户就可以通过继承View类来开发自己...在代码中右击,弹出的快捷菜单中选择“代码/覆盖/实现方

    1.自定义View

    虽然Android提供了很多继承了View类的UI组件,但是在实际开发时,还会出现不足以满足程序需要的情况。这时用户就可以通过继承View类来开发自己的组件。开发自定义View组件的主要步骤如下:

    (1)创建一个继承android.view.View类的View类,并且重写构造方法。

    (2)根据需要重写相应的方法。

    在代码中右击,弹出的快捷菜单中选择“代码/覆盖/实现方法”选项,将打开一个可以选择要覆盖或者要实现的方法的对话框,在该对话框中显示了可以呗重写的方法。只需要选中“被重写的方法”的选框,并单击“确定”按钮,Eclipse将自动重写指定的方法。一般情况下,不需要重写全部方法。

    (3)在项目的活动中,创建并实例化自定义View类,并将其添加到布局管理器中。

    2.经典案例

    下面为大家通过一个实例来演示怎样开发自定义View类。

    【例】自定义View组件实现跟随手指动的猫。

    (1)在Eclipse中创建Android应用项目,命名为cat_View。

    (2)打开res\layout目录下的main.xml布局文件,其代码修改为:

    <?xml version ="1.0" encoding = "utf - 8"?>

    <FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"

    android:layout_width = "match_parent"

    android:layout_height = "match_parent"

    android:background = "@drawable/bj"

    android:id = "@+id/mylayout">

    </FrameLayout>

    (3)创建一个名为 CatView的java类,该类继承android.view.View类,重写带一个参数Context的构造方法和onDraw()方法。其中,在构造方法中设置小猫咪的默认显示位置,在onDraw()方法中根据图片回执小猫咪,其代码为:

    public class CatView extends View {

    public float bitmapX; //小猫咪显示位置的X坐标

    public float bitmapY; //小猫咪显示位置的Y坐标      

    public CatView(Context context) {

    super(context);

    bitmapX = 750; //默认小猫咪的显示位置的X轴

    bitmapY = 500; //默认小猫咪的显示位置的Y坐标

    protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    Paint paint = new Paint(); //创建并实例化paint的对象

    Bitmap bitmap = BitmapFactory.decodeResource(this.getResource(),R.drawable.cat); //根据图片生成位图对象

    canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint); //绘制小猫咪

    if (bitmap.isRecycled()){ //判断图片是否回收

    bitmap.recycled(); //强制回收图片

    (4)打开主活动文件MainActivity,它的onCreate()方法中,首先获取帧布局管理器并实例化小猫咪对象cat。接着为cat添加触摸事件监听器,在重写的触摸事件中设置cat的显示位置并重绘cat组件,最后将cat添加到帧布局管理器中,其代码为:

    public class MainActivity extends Activity {

    //第一次调用Activity

    public void onCreate(Bundle saveInstanceState) {

    super.onCreate(saveInstanceState);

    setContentView(R.layout.main);

    //获取帧布局管理器

    Framelayout framelayout = (FrameLayout)findViewById(R.id.mylayout);

    //创建并实例化CatView类

    final CatView cat = new CatView (MainActivity.this);

    //为小猫咪添加触摸事件监听

    cat.setOnTouchListener(new OnTouchListener(){

    public boolean onTouch(View v,MotionEvent event){

    cat.bitmapX = event.getX(); //小猫咪显示位置的X坐标

    cat.bitmapY = event.getY(); //小猫咪显示位置的Y坐标

    cat.invalidate(); //重绘 cat 组件

    return true;

    }

    });

    frameLayout.addView(cat); //将cat添加到布局管理器中

    }

    运行程序,当用鼠标在屏幕上拖拽时,小猫咪将跟着鼠标的拖拽轨迹移动。

    欢迎所有的朋友加QQ群:364595326,一起交流和学习

    展开全文
  • 安卓7.1新特性

    2018-03-21 14:43:00
    有些类似3DTouch菜单。其中AppShortcuts是新提供的一种快捷访问方式,形式为长按应用图标出现的长条. 2.圆形应用图标支持 开发者可以提供与Pixel和其他启动器的外观非常相配的精美圆形图标资源。 3.增强的动态壁.....
  • 提问者采纳 一、应用软件备份  手机上安装了大量的应用...运行Astro,点击菜单中的Tools(工具),选择快捷菜单中的 Application Manager/Backup(程序管理备份),软件会自动搜索手机中安装的第三方应用软件,
  • Android ListView长按创建上下文菜单

    千次阅读 2013-04-12 16:10:27
    ContextMenu上下文菜单,和电脑上单击鼠标右键出现的快捷菜单等同,即安卓中长按某项(2秒左右)出现的快捷菜单, ContextMenu上下文菜单创建方法: 1.重写Activity的onCreateContextMenu()方法,调用Menu的add...
  • Genymotion主窗口允许用户管理自己的虚拟Genymotion设备:   在主菜单栏中,用户可以: 打开执行窗口并启动选定的虚拟设备 ...您还可以通过每台虚拟设备的对应按钮或者快捷菜单: 配置虚拟机设定(包
  • 1、Android团队提供的示例项目 ...由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏、图像处理、时间显示、开始菜单快捷方式等。  地址:http://www.apkbus.com/android-13506-1-1.html 2、Remote
  • ContextView,与上下文环境有关,思想类似于Windows 中的右击单击建弹出的快捷菜单,操作是长时间按住某个组件不放 效果如下:   长时间按住如下:   创建步骤如下: 1覆盖Activity
  • 安卓手机中可以通过同时按下"音量-"键和"电源键"实现屏幕截屏,某些手机也可以通过屏幕下拉快捷菜单中的"截屏"功能实现截屏。本文章分析测试的是lineageOS 17.1的系统通过按下"音量-"键和"电源键"实现屏幕截屏的...
  • 长按图标,能看到图标菜单和通知概览,iOS 上通过 3D Touch 硬件来实现的功能,Android 则是长按即可。   目前最实用的,是支付宝的快捷付款功能。
  • ApkIDE——安卓反编译

    2014-10-19 10:52:47
    小米人APK改之理是一款可视化的用于修改安卓Apk程序文件的工具,集成了ApkTool、Dex2jar、JD-GUI等Apk修改工具,集Apk反编译、Apk打包、Apk签名,支持语法高亮的代码编辑器,基于文件内容的关键字(支持单行代码或...
  • 正常装后,APKDB软件会在鼠标右键创建快捷菜单,非常方便者使用。 APKDB 中文版执行安装后,直接在【鼠标右键】生成快捷键,自动关联APK、DEX、Odex、zip文件。只要在电脑任意非C盘根目录,【鼠标右键】点击相关文件...
  • 1)首页: SwipeRefreshLayout 地址:https://github.com/hanks-zyh/SwipeRefreshLayout 1.2)首页轮播的Tab样式,这个网上也是很多例子 PagerSlidingTab ...1.3)首页的悬浮快捷菜单,类似于Goo
  • 安卓文件管理神器--X-plore

    千次阅读 2019-01-05 16:17:53
    安卓文件管理神器--X-plore官网看看介绍功能:1、文件打开速度较快;2、可直接安装APK文件(选中apk文件后,在菜单中选择从系统中打开);3、多种操作方式结合:触屏+按键+轨迹球,并保留塞班的快捷操作方式,如轨迹...
  • 安卓手机-TSF桌面

    2013-02-27 22:47:49
    您可以很自由地把单个或多个应用从应用页面中创建快捷方式并拖拽到任何一个自定义页面,或在自定义页面中把各种控件自由的进行页面切换、角度旋转等操作,从而布局属于您的个性化页面. 侧面栏提供了各种TSF SHELL 3D...
  • 黑马安卓52期视频教程

    热门讨论 2015-06-24 22:15:48
    01、安卓基础+JNI(14天)-------------------------- day01_Android应用开发-快速入门 01_网络制式的概念 02_android简单历史 03_Android体系结构 04_JVM和DVM的区别 05_下载SDK 06_SDK目录结构 07_模拟器的创建 ...
  • 这个框架会比系统自带的Fragment更为简便,快捷 其他准备 去除顶部工具栏 添加菜单栏 activity_main.xml文件及其准备 activity_main.xml文件 注意:include里面的layout为下面罗列出来的toolbar.xml文件和...
  • # 直装版,支持免流,支持QQ快捷登录! 1.去除启动向导直接进主界面 2.去除无用权限和无用服务项 3.去除所有广告和消息推送 4.设置菜单优化与界面简化 5.主题美化请切换为星空主题 6.去除升级组件永不升级 7.修改qq...
  • 《APK+Dex文件反编译及回编译工具》 简称 APKDB 是一款针对Android OS系统的APK程序,直接反编译...正常安装后,它直接在【鼠标右键】创建快捷菜单;非常方便汉化工作者,对APK或Dex文件进行简易的反编译回编译操作;
  •  便捷的图标操作菜单(桌面长按图标)。  功能表支持文件夹及关闭正在运行的进程(长按图标进入编辑模式)。  支持自定义手势操作(支持桌面与快捷条图标)。  支持可滑动桌面小部件和调整小部件大小。
  • 而欧朋浏览器也将快捷菜单放置到了右上角,这样给下方留出了更多的空间,而外观上也更加的美观。  总结:  相信大家看完上面的评测后,大家对于新欧朋浏览器有了一些了解,但是其实我只是介绍了几个比较突出的...
  • GoToMeeting是一款非常受欢迎的视频会议软件。它支持多种设备,可切换多种语言,能为更多的用户提供服务。另外,软件还具备会议录制、会议管理、视频音频同步、会议交流等功能...13.菜单快捷按钮 14.界面多语言显示切换
  • 全新体验独特的扇形菜单快捷点划更顺畅 多窗口便利操控,不同页面轻松切换 最大化网页可视面积,自动适配调整网页大小,展现最佳效果 应用中心 手机酷站,海量新闻资讯任你选 Web app方式呈现,结构清晰,即...
  • ecplice 建立快捷方式

    千次阅读 2015-02-09 14:59:23
    在/usr/share/applications目录下使用如下命令建立一个程序菜单中的快捷方式: [Desktop Entry] Name=eclipse Name[zh_CN]=安卓开发 Comment=android-Development Keywords=Settings;Cleaning;Customization Exec...
  • 下面就教教大家荣耀v10有哪些录屏方法:荣耀v10录屏教程1、菜单栏录屏下拉手机屏幕,找到【屏幕录制】快捷按钮,如果没有找到,向下滑动开关列表,点击“编辑”,找到“屏幕录制”快捷按钮,如果此时点击“屏幕录制...
  • 1、Android团队提供的示例项目 ...由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏、图像处理、时间显示、开始菜单快捷方式等。  地址:http://www.apkbus.com/android-13506-1-1.html 2、Remote

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

安卓快捷菜单